하나의 표시기에 0으로 나누기 오류가 있습니다. - 페이지 4

 

코드의 제한은 int입니다. 1/2=0.5이면 분명히 이제 반올림이 1이 아니라 0을 제공합니까?

가설을 테스트하기 위해 코드를 변경했습니다.

         double d1=(delta_price_high-center_line_point)/(( double )limit/ 2 );
         double d2=(center_line_point-delta_price_low)/(( double )limit/ 2 );
 
Aleksey Vyazmikin :

완전한 휴지통 - 다시 0으로 나누기 오류가 발생했습니다.

나는 ME의 코드를 그림으로 게시합니다. 아마도 제가 시각 장애인일 수 있지만 무슨 일이 일어나고 있는지 이해하지 못합니다.

같은 줄에 모두 오류가 있습니다.

인쇄용 코드 추가로 인해 오류가 있는 행이 이동되었기 때문에 파일은 동일합니다.

스타일러 사용해야 합니다. 문제 줄이 if(limit==0) 검사 영역에 포함되어 있지 않음을 즉시 알 수 있습니다.

 
Vladimir Karputov :

스타일러 사용해야 합니다. 문제가 있는 줄이 if(limit==0) 검사 영역에 포함되어 있지 않음을 즉시 알 수 있습니다.

그래서 그녀는 올 필요가 없습니다, 왜?

 

이러한 코드

         int a= 1 ;
         double test= 1 /(a/ 2 );

터미널을 끊었습니다.

 
Aleksey Vyazmikin :

코드의 제한은 int입니다. 1/2=0.5이면 분명히 이제 반올림이 1이 아니라 0을 제공합니까?

가설을 테스트하기 위해 코드를 변경했습니다.

코드:

 //+------------------------------------------------------------------+
//|                                           writeSpicifiedType.mq5 |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link        ""
#property version    "1.00"
//---
double high=- 1.0 ;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//---
   for ( int limit= 0 ;limit< 4 ;limit++)
     {
       Print ( "limit (" ,limit, ")/2 " ,limit/ 2 );
     }
  }
//+------------------------------------------------------------------+


결과:

Test_en (EURUSD,M30)    limit ( 0 )/ 2 0
Test_en (EURUSD,M30)    limit ( 1 )/ 2 0
Test_en (EURUSD,M30)    limit ( 2 )/ 2 1
Test_en (EURUSD,M30)    limit ( 3 )/ 2 1
 
Vladimir Karputov :

코드:


결과:

그것이 바로 요점이며 이전에는 분명히 1/2이 0이 아닌 1을 주었습니다.

 
Aleksey Vyazmikin :

그것이 바로 요점이며 이전에는 분명히 1/2이 0이 아닌 1을 주었습니다.

아니요. 항상 그렇게 둥글었습니다.

 
Vladimir Karputov :

아니요. 항상 그렇게 둥글었습니다.

그래서 아직 다른데...

 

인쇄 코드를 변경했습니다.

         if (limit/ 2 == 0 )
         {
         limit= 2 ;
         Print ( "start_time - " , TimeToString (start_time, TIME_DATE | TIME_MINUTES ), " stop_time - " , TimeToString (stop_time, TIME_DATE | TIME_MINUTES ));
         Print ( "start_index=" ,start_index, " stop_index=" ,stop_index);
         }

그리고 이제 나는 얻는다

 2018.07 . 04 15 : 47 : 07.959 IndDrafter (Si- 9.18 ,H1) start_time - 2017.08 . 10 11 : 00 stop_time - 2017.08 . 10 11 : 00
2018.07 . 04 15 : 47 : 07.959 IndDrafter (Si- 9.18 ,H1) start_index= 2012 stop_index= 2012

어때요?

 
Aleksey Vyazmikin :

인쇄 코드를 변경했습니다.

그리고 이제 나는 얻는다

어때요?

괜찮은. 제한이 공식을 사용하여 계산되는 경우 limit=( int )(stop_time-start_time)/ PeriodSeconds ( _Period );

그러면 결과는 = 0이 됩니다.

이제 중지 및 시작 시간이 어떻게 형성되는지 관찰해야 합니다.