【发布时间】:2017-01-17 07:00:34
【问题描述】:
我正在运行一个针对一些数据编写的小型 python 测试,并得到了一些奇怪的结果。归结为:
priceDiff = 219.92 - 219.52
if(priceDiff >= .40):
print "YES"
else:
print "NO"
结果是“否”
为什么 0.40 不 >= .40?
【问题讨论】:
-
试试
print(219.92 - 219.52)。你会感到惊讶。 -
我尝试了 float.hex(priceDiff) 和 float.hex(.40),是的,我很惊讶,尽管我想我应该如此。自从我不得不争论浮点数以来已经有一段时间了,但我只是认为这会起作用(因为我只是在比较包含价格的数据)
-
您不必走那么远。
priceDiff是 0.39999999999997726,小于 0.4。 -
“永远不要测试浮点数是否相等”。在这种情况下,一种选择可能是编写一点回旋余地,将边界设置为意义较小且可能“不可能”的值,例如
priceDiff >= 0.3995(或0.39999995)。为了获得完全的可预测性和准确性,请使用 Decimal 而不是 float。
标签: python floating-accuracy floating