以这段代码为例:
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
注意:你也可以根据精度需求使用 <=。
((12.0 / 5) - (12 / 5)) * 5 = 1.9999999999999996
,Python3:((12.0 / 5) - (12 / 5)) * 5 = 0.0
。 - user626998//
进行整数除法:((12.0 / 5) - (12 // 5)) * 5
。 - Martijn Pieters