>>> float(str(0.65000000000000002))
0.65000000000000002
>>> float(str(0.47000000000000003))
0.46999999999999997 ???这里发生什么事情?如何将0.47000000000000003转换为字符串,并将结果值转换回float?
我在Windows上使用Python 2.5.4。
发布于 2009-11-22 18:35:48
str(0.47000000000000003) '0.47'和float('0.47')可以是0.46999999999999997。这是由于浮点数的表示方式(请参阅这篇wikipedia文章)。
注意:float(repr(0.47000000000000003))或eval(repr(0.47000000000000003))会给你预期的结果,但如果你需要精度,你应该使用Decimal。
发布于 2009-11-22 18:34:46
float (和double)没有无限的精度。当您对它们进行操作时,自然会出现舍入误差。
发布于 2009-11-22 19:41:21
这是一个Python FAQ
同样的问题也出现在quite regularly in comp.lang.python上。
我认为这是一个常见问题,因为python在所有其他方面都很完美;-),我们希望它能完美地执行算术-就像我们在学校里学到的一样。然而,正如任何学过数值方法课程的人都会告诉你的那样,浮点数离完美还有很长的路要走。
Decimal是一个很好的选择,如果你想要更快的速度和更多的选择,gmpy也很好。
https://stackoverflow.com/questions/1778368
复制相似问题