转型为' int'在Python中生成错误的结果

时间:2015-08-07 17:08:34

标签: python python-3.x int division

我尝试在Python 3.3中执行以下类型转换操作

  

int(10 ** 23/10)

     

输出:10000000000000000000000

在增加一个或更多的力量之后

  

int(10 ** 24/10)

     

输出:99999999999999991611392

     

int(10 ** 25/10)

     

输出:999999999999999983222784

为什么会这样?虽然像

这样简单的类型转换
  

int(10 ** 24)

     

输出:1000000000000000000000000

不影响价值。

2 个答案:

答案 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