内置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
答案 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以获取更多详细信息。