如何在python中无舍入地存储精确的十进制数

时间:2019-06-12 18:59:44

标签: python decimal rounding

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

我想恢复原始的十进制全数字,并在输出到文件时保持原样。

a=-1.23456789012e+17

print(a)

-1.23456789012e+17

因此要删除python格式化的指数,因为我也尝试从十进制模块转换为Decimal

Decimal(a)

Decimal(-123456789012345680)

在两种情况下,python都会更改我想要的小数的确切表示形式。我不想四舍五入或更改我的原始十进制。

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

1 个答案:

答案 0 :(得分:0)

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

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

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

有关更多详细信息,请咨询documentation