我想使用Python 2.7计算一个很大的数字(类型,浮点数)和一个很小的数字的加法运算。

例如:

>> x = 1546439400046560970.
>> y = 1.
>> print(int(x + y))
1546439400046561024


这是不对的。正确答案是1546439400046560971。

我意识到问题是由于类型从float转换为int所致。如果我想获得正确的答案,该如何解决这个问题?

最佳答案

我意识到问题是由于类型从float转换为int所致。


并不是的。浮点数本身并不能精确地存储您的价值。通过转换为比浮点数更精确的类型(例如decimal),可以证明是这种情况。

>>> import decimal
>>> decimal.decimal(1546439400046560971.)
Decimal('1546439400046561024')


因此,即使您从未使用x类型,任何最初将int存储为浮点的解决方案都注定会失败。

一种可能的解决方案是将您的值存储为十进制开头。请记住使用字符串而不是浮点数来初始化它们,否则精度将丢失。

>>> from decimal import Decimal
>>> x = Decimal("1546439400046560971")
>>> y = Decimal("1")
>>> x+y
Decimal('1546439400046560972')

关于python - 如何在Python中准确解释大型浮点数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56011363/

10-15 22:58