为什么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