以此代码为例:
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?)
答案 0 :(得分:11)
因为第一次计算没有返回完全 2.0:
>>> ((12.0 / 5) - (12 / 5)) * 5
1.9999999999999996
print
仅将浮点数显示限制为12位有效数字,导致该值四舍五入为2.0。
答案 1 :(得分:0)
@Bakuriu在评论中得到了很长的答案。
简而言之,在浮点数之间进行相等比较根本不正确。始终选择合适的epsilon值(误差范围),以确保所需的整数和计算结果之间的差异在您容忍的误差范围内。
假设您设置eps = 1e-5
(错误在+/- 0.00001内)
然后你可以做
print abs(((12.0 / 5) - (12 / 5)) * 5 - 12 % 5) < eps
注意:你也可以做&lt; =,取决于你的精确需求。