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