如何将大浮点值转换为int?

时间:2017-02-14 19:59:41

标签: python python-2.7

我有一个包含大浮点数的变量,比如a = 999999999999999.99

当我在解释器中输入int(a)时,它会返回1000000000000000。 对于像这样的长数字,我如何得到999999999999999的输出?

2 个答案:

答案 0 :(得分:7)

999999999999999.99是一个无法以浮点格式精确表示的数字,因此Python会妥协并选择可以表示的最接近的值。在这种情况下,恰好是1000000000000000.这就是为什么将它转换为整数会给你1000000000000000。

如果您需要比浮点数更精确的精度,请考虑使用decimal.Decimal

>>> import decimal
>>> a = decimal.Decimal("999999999999999.99")
>>> a
Decimal('999999999999999.99')
>>> int(a)
999999999999999

答案 1 :(得分:3)

问题不是int,问题是浮点值本身。您的值需要17位精度才能正确表示,而双精度浮点值的精度在15到16位之间。因此,当您输入它时,它会四舍五入到最接近的可表示浮点值,即1000000000000000.0。当int被调用时,它无法做到 - 精度已经丢失。

如果您需要准确表示此类值,则可以使用decimal数据类型,请记住,与常规浮点数相比,性能确实受到影响。