如何在python中存储精确的十进制数而不进行任何舍入



我有一个数字 -123456789012345678.879,它是从 json 文件中解析并存储在字典中。在字典中,它显示为 -1.23456789012e+17

我想取回原始的完整十进制数并保持输出到文件时的状态。

a=-1.23456789012e+17
print(a)
-1.23456789012e+17

因此,为了删除python正在格式化的指数,因为我还尝试从十进制模块转换为十进制

Decimal(a)
Decimal(-123456789012345680)

在这两种情况下,python都在改变我想要的小数的确切表示形式。我不想对原始小数进行任何舍入或更改。

我目前没有将原始解析值格式化为字符串的选项,需要另一种方法将 python 指数数转换回原始格式

我不确定我是否理解这个问题,但请记住,Decimal 只是一个类 - 它不能对传递给它的值产生魔术。当您在浮点数中丢失精度时,这将发生在Decimal调用之前,因此类无法恢复丢失的信息。

为了避免这种情况,Decimal 类还允许您从字符串构造值。这样可以避免失去精度:

>>> from decimal import Decimal
>>> Decimal('-123456789012345678.929')
Decimal('-123456789012345678.929')
>>> print(Decimal('-123456789012345678.929'))
-123456789012345678.929

有关更多详细信息,请参阅文档。

最新更新