以这段代码为例:
print 2.0 == 2 #---> returns True
print 12 % 5 #---> returns 2
print ((12.0 / 5) - (12 / 5)) * 5 #---> returns 2.0
print ((12.0 / 5) - (12 / 5)) * 5 == 12 % 5 #---> returns False (What the hell happens here?)
因为第一次计算没有准确返回2.0:
>>> ((12.0 / 5) - (12 / 5)) * 5
1.9999999999999996
print
将浮点显示限制为仅 12 位有效数字,导致值四舍五入为 2.0。
@Bakuriu 在评论中为您得到了长答案。
简而言之,在浮点数之间进行相等比较是完全不对的。始终选择适当的 epsilon 值(误差范围),以确保所需整数与计算结果之间的差异在您的容许误差范围内。
假设您设置eps = 1e-5
(误差在 +/- 0.00001 内)
然后你可以做
print abs(((12.0 / 5) - (12 / 5)) * 5 - 12 % 5) < eps
注意:您也可以执行 <=,具体取决于您的精度需求。