在 python 中将指数转换为整数

Converting exponential to integer in python

当我执行此 python 代码时:

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

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

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

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

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

(似乎 Python 语言文档在运算符的效果中并不准确。它 notes "The numeric arguments are first converted to a common type" 但忘记了,要获得 float 结果,最简单的方法就是利用平台的浮动划分。)

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

要得到你期望的结果,请使用 // 而不是 /:"floor division" (//) 不会将其参数转换为 float . (OTOH,如果其中一些已经是 float,它可以转换另一个来执行浮点除法并将结果截断为 flooring integer 值。)

这与@PM2Ring 告诉您的基本相同,但形成为答案。

如果你想用比通常 float 提供的更精确的非整数进行计算,你应该摆脱内在类型并考虑使用标准库中的 decimal , GMPwrapper 或类似的解决方案。