在python中将指数转换为整数

时间:2018-04-30 16:02:17

标签: python floating-point int exponential

当我执行这个python代码时:

integer = 18243150071292141317265306851
print(int(integer / 1))

我收到的输出是:18243150071292140668971909120,它不等于integer

为什么会发生这种情况,如何使输出等于integer

1 个答案:

答案 0 :(得分:0)

这个结果可以在Python3(或从future导入真正除法的Python2)中实现,但在库存模式下不是Python2。

运算符/始终生成“true”商(带小数部分),但首先它将两个参数都转换为float(与C中的double相同)。此转换是精度丢失的地方,因为此float只有53个重要的二进制数字(猜测您的平台基于IEEE754,因为> 99%是)。除以1的参数已经以这种方式四舍五入,等于18243150071292140668971909120。

(似乎Python语言文档在运算符的效果中并不精确。notes“数字参数首先被转换为公共类型”但忘记了这一点,得到float结果,利用最简单的方法 - 依靠平台的浮动分区。)

然后,转换回int(确切且基本上无限制)会给出相同的值,并且您会看到它打印出来。

要获得预期效果,请使用//代替/:“底线分区”(//)不会将其参数转换为float。 (OTOH,如果其中一些已经float,它可以转换另一个执行浮动除法,并将结果截断为地板整数值。)

这与@ PM2Ring告诉你的情况基本相同,但形成了答案。

如果你想用精度超过通常float的非整数数进行计算,你应该摆脱内在类型并考虑使用标准库中的decimal { {1}}库wrapper或类似解决方案。

相关问题