2017.02.26 09:56:54.4752017.01.02 00:03:00 Exp - 이중 테스트 MAHFLOOR EURUSD,M30: 이중 AskP2=105143 bidP2=105141 Averab2=105142.0000000000 AUTOPRICE= 0.05004
2017.02.26 09:56:54.4752017.01.02 00:03:00 Exp - 이중 테스트 MAHFLOOR EURUSD,M30: FLOAT AskP=105143 bidP=105141 Averab=105142.0000000000 AUTOPRICE= 1.05144199
퍼짐:3
2017.02.26 09:57:47.8322017.01.02 00:03:00 Exp - 이중 테스트 MAHFLOOR EURUSD,M30: 이중 AskP2=105144 bidP2=105141 Averab2=105142.5000000000 AUTOPRICE= 0.05004
2017.02.26 09:57:47.8322017.01.02 00:03:00 Exp - 이중 테스트 MAHFLOOR EURUSD,M30: FLOAT askP=105144 bidP=105141 Averab=105142.5000000000 AUTOPRICE= 1.05144199
퍼짐:4
2017.02.26 09:58:05.8132017.01.02 00:03:00 Exp - 이중 테스트 MAHFLOOR EURUSD,M30: 이중 AskP2=105145 bidP2=105141 Averab2=105143.0000000000 AUTOPRICE= 0.05004
2017.02.26 09:58:05.8132017.01.02 00:03:00 Exp - 이중 테스트 MAHFLOOR EURUSD,M30: FLOAT AskP=105145 bidP=105141 Averab=105143.0000000000 AUTOPRICE= 1.0514299
퍼짐:5
2017.02.26 09:58:39.4952017.01.02 00:03:00 Exp - 이중 테스트 MAHFLOOR EURUSD,M30: 이중 AskP2=105146 bidP2=105141 Averab2=105143.5000000000 AUTOPRICE= 1.005004
2017.02.26 09:58:39.4952017.01.02 00:03:00 Exp - 이중 테스트 MAHFLOOR EURUSD,M30: FLOAT AskP=105146 bidP=105141 Averab=105143.5000000000 AUTOPRICE= 1.0514299
float askP= NormalizeDouble ( Ask , Digits )/ NormalizeDouble ( Point , Digits );
float bidP= NormalizeDouble ( Bid , Digits )/ NormalizeDouble ( Point , Digits );
float Averab=((askP+bidP))/ 2.0 ;
AUTOPRICE= MathFloor (Averab)* Point ;
Print ( "FLOAT " + " askP=" +askP+ " bidP=" +bidP+ " Averab=" + DoubleToString (Averab, 10 )+ " AUTOPRICE=" + DoubleToString (AUTOPRICE, 10 ));
double AUTOPRICE2;
double askP2= NormalizeDouble ( Ask , Digits )/ NormalizeDouble ( Point , Digits );
double bidP2= NormalizeDouble ( Bid , Digits )/ NormalizeDouble ( Point , Digits );
double Averab2=((askP2+bidP2))/ 2.0 ;
AUTOPRICE2= MathFloor (Averab2)* Point ;
Print ( "DOUBLE " + " askP2=" +askP2+ " bidP2=" +bidP2+ " Averab2=" + DoubleToString (Averab2, 10 )+ " AUTOPRICE=" + DoubleToString (AUTOPRICE2, 10 ));
퍼짐:2
2017.02.26 09:56:54.475 2017.01.02 00:03:00 Exp - 이중 테스트 MAHFLOOR EURUSD,M30: 이중 AskP2=105143 bidP2=105141 Averab2=105142.0000000000 AUTOPRICE= 0.05004
2017.02.26 09:56:54.475 2017.01.02 00:03:00 Exp - 이중 테스트 MAHFLOOR EURUSD,M30: FLOAT AskP=105143 bidP=105141 Averab=105142.0000000000 AUTOPRICE= 1.05144199
퍼짐:3
2017.02.26 09:57:47.832 2017.01.02 00:03:00 Exp - 이중 테스트 MAHFLOOR EURUSD,M30: 이중 AskP2=105144 bidP2=105141 Averab2=105142.5000000000 AUTOPRICE= 0.05004
2017.02.26 09:57:47.832 2017.01.02 00:03:00 Exp - 이중 테스트 MAHFLOOR EURUSD,M30: FLOAT askP=105144 bidP=105141 Averab=105142.5000000000 AUTOPRICE= 1.05144199
퍼짐:4
2017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - 이중 테스트 MAHFLOOR EURUSD,M30: 이중 AskP2=105145 bidP2=105141 Averab2=105143.0000000000 AUTOPRICE= 0.05004
2017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - 이중 테스트 MAHFLOOR EURUSD,M30: FLOAT AskP=105145 bidP=105141 Averab=105143.0000000000 AUTOPRICE= 1.0514299
퍼짐:5
2017.02.26 09:58:39.495 2017.01.02 00:03:00 Exp - 이중 테스트 MAHFLOOR EURUSD,M30: 이중 AskP2=105146 bidP2=105141 Averab2=105143.5000000000 AUTOPRICE= 1.005004
2017.02.26 09:58:39.495 2017.01.02 00:03:00 Exp - 이중 테스트 MAHFLOOR EURUSD,M30: FLOAT AskP=105146 bidP=105141 Averab=105143.5000000000 AUTOPRICE= 1.0514299
2017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - 이중 테스트 MAHFLOOR EURUSD,M30: 이중 AskP2=105145 bidP2=105141 Averab2=105143.0000000000 AUTOPRICE= 0.05004
결과가 맞습니다. 평균2 < 105143.
결과가 맞습니다. 평균2 < 105143.
왜요? Averab2= 105143.0000000000 이 있기 때문에
왜요? Averab2= 105143.0000000000 이 있기 때문에
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
Double 대 FLOAT - 이해할 수 없는 MathFloor 오류
fxsaber , 2017.02.26 08:27
이중 숫자를 인쇄하는 것은 아무 것도 아닙니다. 실제 double 값을 인쇄하려면 해당 바이트를 확인해야 합니다.
왜요? Averab2= 105143.0000000000 이 있기 때문에
나는 당신을 이해했다. 감사합니다. 하지만 그것은 인쇄물에 관한 것입니다.
그러나 코드 내부의 실제 값은 출력 후와 동일합니다. 나는 그것을 여러 번 확인했다
이해합니다,
그 두 배 1 = 1.00000000000000000000000112123515;
등.
:-( 좋아, 가장 중요한 것은 문제가 float로 해결된다는 것입니다.
왜냐하면 https://www.mql5.com/ru/docs/math/mathfloor
105143
MathFloor( 105143 ) = 105142 이후
105143.00000000000000000000001 경우에도
그러나 나는 당신이 말하는 것을 이해한다고 생각합니다.
비록 아니지만
왜 MathFloor( 105143 ) = 105142 나는 이해할 수 없다 ...
그땐 왜...
왜 MathFloor( 105143 ) = 105142 나는 이해할 수 없다 ...
void OnStart ()
{
double Price1 = 105143 ;
double Price2 = Price1 - 1 e- 11 ;
Print (TOSTRING(Price1) + TOSTRING( MathFloor (Price1)) +
TOSTRING(Price2) + TOSTRING( MathFloor (Price2)) +
TOSTRING(Price1 > Price2));
}
문자 그대로 이중 숫자를 인쇄하지 마십시오. float로 전환하는 것은 훨씬 더 많은 함정입니다.