Double vs FLOAT - 不明确的MathFloor错误 - 页 2 1234567 新评论 Vladislav Andruschenko 2017.02.26 09:00 #11 float AUTOPRICE; 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));传播:22017.02.26 09:56:54.475 2017.01.02 00:03:00 Exp - DOUBLE TESTMATHFLOOR EURUSD,M30:DOUBLE askP2=105143 bidP2=105141 Averab2=105142.000000 AUTOPRICE=1.05142000002017.02.26 09:56:54.475 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:FLOAT askP=105143 bidP=105141 Averab=105142.0000000000 AUTOPRICE=1.0514199734传播:32017.02.26 09:57:47.832 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:DOUBLE askP2=105144 bidP2=105141 Averab2=105142.5000000000 AUTOPRICE=1.05142000002017.02.26 09:57:47.832 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:FLOAT askP=105144 bidP=105141 Averab=105142.5000000000 AUTOPRICE=1.0514199734传播:42017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:DOUBLE askP2=105145 bidP2=105141 Averab2=105143.000000 AUTOPRICE=1.05142000002017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:FLOAT askP=105145 bidP=105141 Averab=105143.0000000000 AUTOPRICE=1.0514299870传播:52017.02.26 09:58:39.495 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:DOUBLE askP2=105146 bidP2=105141 Averab2=105143.5000000000 AUTOPRICE=1.05143000002017.02.26 09:58:39.495 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:FLOAT askP=105146 bidP=105141 Averab=105143.5000000000 AUTOPRICE=1.0514299870 Double vs FLOAT - iTime and iBarShift return PREDICT time period Vladislav Andruschenko 2017.02.26 09:02 #12 重新命名该主题,以便更具体地了解问题。 fxsaber 2017.02.26 09:52 #13 Vladislav Andruschenko:2017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:DOUBLE askP2=105145 bidP2=105141 Averab2=105143.000000 AUTOPRICE=1.0514200000结果是正确的。Averab2 < 105143. Vladislav Andruschenko 2017.02.26 09:54 #14 fxsaber: 结果是正确的。Averab2 < 105143.为什么? 因为Averab2=105143.0000000000 fxsaber 2017.02.26 09:55 #15 Vladislav Andruschenko: 为什么?Averab2=105143.0000000000 关于交易、自动交易系统和策略测试的论坛 Double vs FLOAT - 不明确的MathFloor错误 fxsaber, 2017.02.26 08:27 打印出来的双数是关于什么的。如果你想打印double的真实值,你需要查看它的字节。 Andrey F. Zelinsky 2017.02.26 09:59 #16 Vladislav Andruschenko: 为什么? 因为Averab2=105143.0000000000 因为https://www.mql5.com/ru/docs/math/mathfloor Vladislav Andruschenko 2017.02.26 10:00 #17 fxsaber: 我听你的。谢谢你,但这是就卸货而言的。 但代码里面的真实值和取消预热后的值是一样的。 我已经不止一次检查过了。 我明白。即双1=1.00000000000000000000000000001123515。等等。:-( 好的,主要的是用浮动的方式解决了问题。 Vladislav Andruschenko 2017.02.26 10:02 #18 Andrey F. Zelinsky: 因为https://www.mql5.com/ru/docs/math/mathfloor105143在MathFloor(105143)=105142 之后即使105143.000000000000000000001但我想我知道你在说什么。虽然没有Print(2+" MathFloor="+MathFloor(2));2 MathFloor=2为什么MathFloor(105143)=105142 我不明白......(除非不是105143 而是105142.99999999999999999999) Andrey F. Zelinsky 2017.02.26 10:08 #19 Vladislav Andruschenko:那为什么... 因为https://www.mql5.com/ru/docs/convert/normalizedouble fxsaber 2017.02.26 10:09 #20 Vladislav Andruschenko:为什么MathFloor(105143)=105142 我不明白...(除非不是105143,而是105142.999999999999999999999999)。#define TOSTRING(A) #A + " = " + (string)(A) + " "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));} 结果Price1 = 105143.0 MathFloor(Price1) = 105143.0 Price2 = 105143.0 MathFloor(Price2) = 105142.0 Price1>Price2 = true你不应该从字面上理解双重数字。换成浮动式更是一个隐患。 1234567 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
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 - DOUBLE TESTMATHFLOOR EURUSD,M30:DOUBLE askP2=105143 bidP2=105141 Averab2=105142.000000 AUTOPRICE=1.0514200000
2017.02.26 09:56:54.475 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:FLOAT askP=105143 bidP=105141 Averab=105142.0000000000 AUTOPRICE=1.0514199734
传播:3
2017.02.26 09:57:47.832 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:DOUBLE askP2=105144 bidP2=105141 Averab2=105142.5000000000 AUTOPRICE=1.0514200000
2017.02.26 09:57:47.832 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:FLOAT askP=105144 bidP=105141 Averab=105142.5000000000 AUTOPRICE=1.0514199734
传播:4
2017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:DOUBLE askP2=105145 bidP2=105141 Averab2=105143.000000 AUTOPRICE=1.0514200000
2017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:FLOAT askP=105145 bidP=105141 Averab=105143.0000000000 AUTOPRICE=1.0514299870
传播:5
2017.02.26 09:58:39.495 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:DOUBLE askP2=105146 bidP2=105141 Averab2=105143.5000000000 AUTOPRICE=1.0514300000
2017.02.26 09:58:39.495 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:FLOAT askP=105146 bidP=105141 Averab=105143.5000000000 AUTOPRICE=1.0514299870
2017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:DOUBLE askP2=105145 bidP2=105141 Averab2=105143.000000 AUTOPRICE=1.0514200000
结果是正确的。Averab2 < 105143.
结果是正确的。Averab2 < 105143.
为什么? 因为Averab2=105143.0000000000
为什么?Averab2=105143.0000000000
关于交易、自动交易系统和策略测试的论坛
Double vs FLOAT - 不明确的MathFloor错误
fxsaber, 2017.02.26 08:27
打印出来的双数是关于什么的。如果你想打印double的真实值,你需要查看它的字节。
为什么? 因为Averab2=105143.0000000000
我听你的。谢谢你,但这是就卸货而言的。
但代码里面的真实值和取消预热后的值是一样的。 我已经不止一次检查过了。
我明白。
即双1=1.00000000000000000000000000001123515。
等等。
:-( 好的,主要的是用浮动的方式解决了问题。
因为https://www.mql5.com/ru/docs/math/mathfloor
105143
在MathFloor(105143)=105142 之后
即使105143.000000000000000000001
但我想我知道你在说什么。
虽然没有
为什么MathFloor(105143)=105142 我不明白......(除非不是105143 而是105142.99999999999999999999)
那为什么...
为什么MathFloor(105143)=105142 我不明白...(除非不是105143,而是105142.999999999999999999999999)。
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));
}
你不应该从字面上理解双重数字。换成浮动式更是一个隐患。