如何在python中浮动字符串时保持精度?

时间:2014-09-17 16:22:40

标签: python floating-point

内置float无法保持精确度(例如浮动(' 123.45678' = 123.45677999999999),我重写它,但也遇到同样的问题。我的问题是标题。

a_int = lambda s : sum(((ord(s[j])-48)*(10**(len(s)-j-1)) for j in range(len(s))))

def a_float(s):
    l = s.split(".")
    return a_int(l[0]+l[1]) / 10.0**len(l[1])

>>> s = "11223.512512"
>>> a_float(s)
11223.512511999999

1 个答案:

答案 0 :(得分:3)

浮点值不准确。它们是二进制分数近似值;例如计算机加起来为1/2 + 1/4 + 1/8等(但根据实际值选取这些分数),加上近似小数值。 float值无法准确表示值11223.512512。这是硬件加速支持的代价; float操作非常快,通常精确

如果精确度很重要,请不要使用float值;请改用decimal.Decimal() type。或者决定打印时要表示的位数,并使用format()格式化浮点值:

print format(a_float(s), '.6f')

我建议您阅读Python教程的Floating Point Arithmetic: Issues and Limitations chapter以获取更多详细信息。