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

时间:2018-03-04 08:04:09

标签: python-3.x precision

我有一个字符串,我需要将其转换为浮点数供我使用。

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

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

1 个答案:

答案 0 :(得分:1)

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