为什么Python不应该返回错误语句';T

为什么Python不应该返回错误语句';T,python,equals,modulo,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:

以这段代码为例:

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:


print
将浮点显示限制为仅12位有效数字,从而使值四舍五入为2.0。

@Bakuriu在评论中为您提供了详细的答案

简而言之,在浮点数之间执行相等比较是完全不对的。始终选择适当的ε值(误差范围),以确保所需整数和计算结果之间的差异在允许的误差范围内

假设您设置了eps=1e-5(误差在+/-0.00001范围内)

那你就可以了


打印abs(((12.0/5)-(12/5))*5-12%5)


注意:您还可以执行
((12.0/5)-(12/5))*5
不是
2.0
此外,这在Python 2和3之间有所不同。Python2:
((12.0/5)-(12/5))*5=1.99999999999996
,Python3:
((12.0/5)-(12/5))*5=0.0
@BrandonInvergo:Python3:
((12.0/5)-(12/5))*5
@MartijnPieters…你每天都能学到新东西…谢谢!
>>> ((12.0 / 5) - (12 / 5)) * 5
1.9999999999999996