python - 为什么在 Python 3.7 中 int(x-1) == x True 有一些 x 值?
问题描述
在 Python 3.7 int(x-1) == x
中 True
,x = 5e+17
为什么会这样?如何防止这个错误?
要重现,请将其粘贴到您的 Python 控制台中:
int(5e+17-1) == 5e+17
>True
(我正在使用int
,因为 x 是除法的结果,我需要将其解析为 int。)
解决方案
让我们首先确定5 == 5.0
isTrue
即使5
is anint
并且5.0
is a float
。这是设计使然。
如果我们牢记这一点,那么我们也可以接受int(5e+17) == 5e+17
is True
。
最后,我们看到这int(5e+17) == int(5e+17-1)
也是True
因为精度错误(感谢@juanpa.arrivillaga 的链接)。
现在很清楚为什么int(5e+17-1) == 5e+17
是True
。
这可以通过使用来解决,Decimal
但请务必使用字符串对其进行初始化:
from decimal import Decimal
Decimal('5e+17') - 1 == Decimal('5e+17')
# False