如何在python中存储没有任何舍入的精确十进制数

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (30)

我有一个数字-123456789012345678.879,它从json文件解析并存储在dict中。在dict中它显示为-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

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

扫码关注云+社区

领取腾讯云代金券