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