为什么Python不应该返回False语句?

时间:2013-07-05 16:22:20

标签: python equals modulo

以此代码为例:

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 :(得分: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; =,取决于你的精确需求。