在 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
我尝试在 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