在 Python 中对 'int' 进行类型转换生成错误结果

Typecasting to 'int' in Python generating wrong result

我尝试在 Python 3.3

中执行以下类型转换操作

int( 10**23 / 10 )

Output: 10000000000000000000000

并且在将功率增加一或更多之后

int( 10**24 / 10 )

Output: 99999999999999991611392

int( 10**25 / 10 )

Output: 999999999999999983222784

为什么会这样?虽然像

这样的简单类型转换

int( 10**24 )

Output: 1000000000000000000000000

不影响数值。

您正在使用 / 运算符进行浮点除法运算。 10**24/10 恰好有一个不精确的整数表示。

如果您需要整数结果,请除以//。

>>> type(10**24/10)
<class 'float'>
>>> type(10**24//10)
<class 'int'>

在 Python 3.x 中,/ 始终进行真(浮点)除法。使用 floor division // 可以给你预期的结果。

>>> int(10**25 // 10)
1000000000000000000000000

此行为的原因是 float 无法精确存储大整数。

假设使用IEEE-754双精度,最多可以精确存储253个整数,也就是约1016.另一个例子:

>>> int(10**17 / 10 + 1)
10000000000000000