我尝试在Python 3.3中执行以下类型转换操作
int(10 ** 23/10)
输出:10000000000000000000000
在增加一个或更多的力量之后
int(10 ** 24/10)
输出:99999999999999991611392
int(10 ** 25/10)
输出:999999999999999983222784
为什么会这样?虽然像
这样简单的类型转换int(10 ** 24)
输出:1000000000000000000000000
不影响价值。
答案 0 :(得分:5)
您正在使用/运算符进行浮点除法。 10 ** 24/10碰巧有一个不精确的整数表示。
如果需要整数结果,请除以//.
>>> type(10**24/10)
<class 'float'>
>>> type(10**24//10)
<class 'int'>
答案 1 :(得分:2)
在Python 3.x中,/
始终为真(浮点)除法。使用楼层划分//
可以为您提供预期的结果。
>>> int(10**25 // 10)
1000000000000000000000000
这种行为的原因是float
无法准确存储大整数。
假设使用IEEE-754双精度,它可以精确地存储最多2 53 的整数,这大约是10 16 。另一个例子:
>>> int(10**17 / 10 + 1)
10000000000000000