Python float – str – 漂浮奇怪

>>> float(str(0.65000000000000002)) 0.65000000000000002 >>> float(str(0.47000000000000003)) 0.46999999999999997 ??? 

这里发生了什么? 如何将0.47000000000000003转换为string,并将结果值返回为浮点型?

我在Windows上使用Python 2.5.4。

str(0.47000000000000003)给出'0.47'float('0.47')可以是0.46999999999999997 。 这是由于浮点数的表示方式(见维基百科文章)

注意: float(repr(0.47000000000000003))eval(repr(0.47000000000000003))会给你预期的结果,但是如果你需要精度的话你应该使用十进制 。

float(和double)没有无限精度。 当然,在对它们进行操作时会发生舍入错误。

这是一个Python FAQ

comp.lang.python也经常出现同样的问题。

我认为这是一个常见问题的原因是,因为python在所有其他方面都是完美的,所以我们期望它能够完美地执行算术运算 – 就像我们在学校里教的一样。 然而,任何做过数值方法的人都会告诉你,浮点数与完美的距离很远。

十进制是一个很好的select,如果你想要更多的速度和更多的selectgmpy是伟大的。

通过这个例子,我认为这是Python中的错误,当你分开

  >>> print(int(((48/5.0)-9)*5)) 2 

简单的方法,我通过这个解决了这个问题

  >>> print(int(round(((48/5.0)-9)*5,2))) 3