首页 > 解决方案 > 为什么在 Python 3.7 中 int(x-1) == x True 有一些 x 值?

问题描述

在 Python 3.7 int(x-1) == xTruex = 5e+17 为什么会这样?如何防止这个错误?

要重现,请将其粘贴到您的 Python 控制台中:

int(5e+17-1) == 5e+17
>True

(我正在使用int,因为 x 是除法的结果,我需要将其解析为 int。)

标签: python

解决方案


让我们首先确定5 == 5.0isTrue即使5is anint并且5.0is a float。这是设计使然。

如果我们牢记这一点,那么我们也可以接受int(5e+17) == 5e+17is True

最后,我们看到这int(5e+17) == int(5e+17-1)也是True因为精度错误(感谢@juanpa.arrivillaga 的链接)。

现在很清楚为什么int(5e+17-1) == 5e+17True

这可以通过使用来解决,Decimal但请务必使用字符串对其进行初始化:

from decimal import Decimal

Decimal('5e+17') - 1 ==  Decimal('5e+17')

# False

推荐阅读