如何将具有科学记数法的字符串转换为浮点而不会丢失精度?

问题描述 投票:1回答:1

我有一个字符串,我需要转换为浮点数让我继续工作。

num = "2.769999999999999574e+00"

如果我进行浮点运算,精度就会消失

print(float(num))  # 2.7699999999999996

如果我使用Decimal类,那么精度就会消失

from decimal import Decimal
print(Decimal(num))  # 2.769999999999999574

看起来,如果提供的数字首先是浮点数,则Decimal只能保持精度

print(Decimal(2.769999999999999574e+00))  # 2.769999999999999573674358543939888477325439453125

如何在将数字从字符串转换为浮点数时保持精度?

python-3.x precision
1个回答
1
投票

Decimal(2.769999999999999574e+00)不“保持精确”。它只暴露了limitations of floating point arithmetic。您指定的数字在内存中没有精确的位表示,并且在某种程度上近似,这是您在此处看到的扩展精度。这是您(和任何其他)CPU的限制。另一方面,Decimal("2.769999999999999574e+00")实际上是一个更正确的数量表示,而不是通过实际浮动。

© www.soinside.com 2019 - 2024. All rights reserved.