Double vs FLOAT - 不明确的MathFloor错误 - 页 3 1234567 新评论 Vladislav Andruschenko 2017.02.26 09:09 #21 Andrey F. Zelinsky: 因为https://www.mql5.com/ru/docs/convert/normalizedouble注意,当使用Print()输出到日志时,规范化的数字可能比你预期的包含更多的小数位。比如说。然后在评论中,同样 Vladislav Andruschenko 2017.02.26 09:10 #22 fxsaber:#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 不要从字面上理解双数打底。谢谢你,我毕竟还是找到了正确的解决办法,但我担心因为排列不正确而出现错误!我想这是一个很好的办法。 Dmitry Fedoseev 2017.02.26 09:12 #23 一个非正常化的数字除以另一个非正常化的数字的余数,结果在任何情况下都是非正常化的。这种功能应该从语言中完全删除,以免给不成熟的心理造成创伤。 fxsaber 2017.02.26 09:13 #24 Vladislav Andruschenko: 我可能终究找到了正确的解决方案。 不幸的是,你的代码是对你正在做的事情完全误解的表现。试图找出问题的根源。 Vladislav Andruschenko 2017.02.26 09:13 #25 Dmitry Fedoseev:一个非正常化的数字除以另一个非正常化的数字的余数,结果在任何情况下都是非正常化的。这种功能应该从语言中完全删除,以免给不成熟的心理造成创伤。 好吧,对我来说一切都正常了。这就是有趣之处。 Andrey Dik 2017.02.26 09:15 #26 Vladislav Andruschenko: 好吧,我无所谓。这是最棘手的部分。 你在做不必要的转换,导致你失去了标志。 只有在你直接使用你的计算结果之前才进行归一化。事先尽可能避免所有的数字转换和换算。 Vladislav Andruschenko 2017.02.26 09:16 #27 Andrey Dik: 你正在做不必要的转换,导致字符的损失。 这些已经是令人绝望的代码.....我已经用不同的方式做了。但正如上文所说。可能是由于不正确地采取了我在错误上的罪过。虽然这些变量在代码中也有小毛病。感谢大家的帮助和建议。但一切都很清楚,有了浮动工作。 fxsaber 2017.02.26 09:19 #28 Vladislav Andruschenko:有了Float,一切工作都很清楚。 最糟糕的建议之一是将双倍数转换为浮动数。 Dmitry Fedoseev 2017.02.26 09:19 #29 Vladislav Andruschenko: 嗯,对我来说,这很好。这就是有趣的事情。 世界上哪里是正常的呢? Andrey Dik 2017.02.26 09:20 #30 Vladislav Andruschenko: 这已经是令人绝望的代码.....我已经用不同的方式做了。但正如上文所说。可能是因为不正确地接受了我犯了一个错误。虽然这些变量在代码中也有小毛病。感谢大家的帮助和建议。但一切都很清楚,有了浮动工作。 浮动是一种数字阉割,让你没有任何优势。最好是处理转换中的所有损失,并使用尽可能高的精度--两倍。 1234567 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
因为https://www.mql5.com/ru/docs/convert/normalizedouble
注意,当使用Print()输出到日志时,规范化的数字可能比你预期的包含更多的小数位。比如说。
然后在评论中,同样
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));
}
谢谢你,我毕竟还是找到了正确的解决办法,但我担心因为排列不正确而出现错误!我想这是一个很好的办法。
一个非正常化的数字除以另一个非正常化的数字的余数,结果在任何情况下都是非正常化的。
这种功能应该从语言中完全删除,以免给不成熟的心理造成创伤。
我可能终究找到了正确的解决方案。
一个非正常化的数字除以另一个非正常化的数字的余数,结果在任何情况下都是非正常化的。
这种功能应该从语言中完全删除,以免给不成熟的心理造成创伤。
好吧,我无所谓。这是最棘手的部分。
只有在你直接使用你的计算结果之前才进行归一化。事先尽可能避免所有的数字转换和换算。
你正在做不必要的转换,导致字符的损失。
嗯,对我来说,这很好。这就是有趣的事情。
这已经是令人绝望的代码.....我已经用不同的方式做了。但正如上文所说。可能是因为不正确地接受了我犯了一个错误。虽然这些变量在代码中也有小毛病。