我有一个字符串,我需要转换为浮点数让我继续工作。
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
如何在将数字从字符串转换为浮点数时保持精度?
Decimal(2.769999999999999574e+00)
不“保持精确”。它只暴露了limitations of floating point arithmetic。您指定的数字在内存中没有精确的位表示,并且在某种程度上近似,这是您在此处看到的扩展精度。这是您(和任何其他)CPU的限制。另一方面,Decimal("2.769999999999999574e+00")
实际上是一个更正确的数量表示,而不是通过实际浮动。