我正在运行一个针对某些数据编写的小python测试并得到了一些奇怪的结果。把它归结为:
priceDiff = 219.92 - 219.52
if(priceDiff >= .40):
print "YES"
else:
print "NO"
结果为“NO”
为什么0.40不是> = .40?
答案 0 :(得分:3)
来自文档
表示错误是指一些(大多数,实际上)十进制的事实 分数不能完全表示为二元(基数2)分数。 这就是Python(或Perl,C,C ++,Java,Fortran, 和许多其他人)经常不会显示您的确切十进制数 预计有:
0.1 + 0.2
0.30000000000000004
答案 1 :(得分:2)
Python提供受控环境,以“Decimal”的形式使用浮点数。它提供了多种选项来控制/调整舍入量以及不同策略的舍入量。(https://docs.python.org/3.5/library/decimal.html#rounding-modes)。
from decimal import Decimal, ROUND_HALF_EVEN
a = Decimal(219.92).quantize(Decimal('.01'), rounding=ROUND_HALF_EVEN)
b = Decimal(219.52).quantize(Decimal('.01'), rounding=ROUND_HALF_EVEN)
priceDiff = a - b
cmp = Decimal(0.40).quantize(Decimal('.01'), rounding=ROUND_HALF_EVEN)
if priceDiff.compare(cmp) >= 0:
print "YES"
else:
print "NO"
print(d)
print(d2)
print(priceDiff)
print(cmp)
恕我直言,这是更好的可读性和实施计算的中间点,这些计算是精确敏感的w.r.t应用程序。希望这有帮助