Double vs FLOAT - 不明确的MathFloor错误 - 页 3

 

注意,当使用Print()输出到日志时,规范化的数字可能比你预期的包含更多的小数位。比如说。

然后在评论中,同样

 
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
不要从字面上理解双数打底。

谢谢你,我毕竟还是找到了正确的解决办法,但我担心因为排列不正确而出现错误!我想这是一个很好的办法。

 

一个非正常化的数字除以另一个非正常化的数字的余数,结果在任何情况下都是非正常化的。

这种功能应该从语言中完全删除,以免给不成熟的心理造成创伤。

 
Vladislav Andruschenko:

我可能终究找到了正确的解决方案。

不幸的是,你的代码是对你正在做的事情完全误解的表现。试图找出问题的根源。
 
Dmitry Fedoseev:

一个非正常化的数字除以另一个非正常化的数字的余数,结果在任何情况下都是非正常化的。

这种功能应该从语言中完全删除,以免给不成熟的心理造成创伤。

好吧,对我来说一切都正常了。这就是有趣之处。
 
Vladislav Andruschenko:
好吧,我无所谓。这是最棘手的部分。
你在做不必要的转换,导致你失去了标志。

只有在你直接使用你的计算结果之前才进行归一化。事先尽可能避免所有的数字转换和换算。
 
Andrey Dik:
你正在做不必要的转换,导致字符的损失。
这些已经是令人绝望的代码.....我已经用不同的方式做了。但正如上文所说。可能是由于不正确地采取了我在错误上的罪过。虽然这些变量在代码中也有小毛病。

感谢大家的帮助和建议。但一切都很清楚,有了浮动工作。
 
Vladislav Andruschenko:
有了Float,一切工作都很清楚。
最糟糕的建议之一是将双倍数转换为浮动数。
 
Vladislav Andruschenko:
嗯,对我来说,这很好。这就是有趣的事情。
世界上哪里是正常的呢?
 
Vladislav Andruschenko:
这已经是令人绝望的代码.....我已经用不同的方式做了。但正如上文所说。可能是因为不正确地接受了我犯了一个错误。虽然这些变量在代码中也有小毛病。

感谢大家的帮助和建议。但一切都很清楚,有了浮动工作。
浮动是一种数字阉割,让你没有任何优势。最好是处理转换中的所有损失,并使用尽可能高的精度--两倍。