打印到';int';在Python中生成错误的结果

打印到';int';在Python中生成错误的结果,python,python-3.x,int,division,Python,Python 3.x,Int,Division,我尝试在Python3.3中执行以下类型转换操作 国际(10**23/10) 输出:100000000000000000000 在将功率增加一倍或更多后 内部(10**24/10) 输出:9999999999991611392 国际(10*25/10) 输出:99999999999983222784 为什么会这样?虽然是一个简单的类型转换 内部(10**24) 输出:10000000000000000000000 不影响值。您正在使用/运算符进行浮点除法。10**24/10恰好有一个不精确的整数

我尝试在Python3.3中执行以下类型转换操作

国际(10**23/10)

输出:100000000000000000000

在将功率增加一倍或更多后

内部(10**24/10)

输出:9999999999991611392

国际(10*25/10)

输出:99999999999983222784

为什么会这样?虽然是一个简单的类型转换

内部(10**24)

输出:10000000000000000000000


不影响值。

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

如果需要整数结果,请用//除

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

在Python3.x中,
/
总是进行真(浮点)除法。使用楼层划分
/
可以得到预期的结果

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

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

假设使用双精度,它最多可以精确存储253个整数,接近1016个。另一个例子:

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

没有类型转换,只有转换。改为使用
/
获取楼层划分,并避免创建浮点数(这是错误产生的原因)。相关: