我有一个包含大浮点数的变量,比如a = 999999999999999.99
当我在解释器中输入int(a)
时,它会返回1000000000000000
。
对于像这样的长数字,我如何得到999999999999999
的输出?
答案 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
数据类型,请记住,与常规浮点数相比,性能确实受到影响。