>>> float(str(0.65000000000000002))
0.65000000000000002
>>> float(str(0.47000000000000003))
0.46999999999999997 ???
这里发生了什么?
如何将0.47000000000000003
转换为字符串并将结果值转换为浮动?
我在Windows上使用Python 2.5.4。
答案 0 :(得分:16)
str(0.47000000000000003)
提供'0.47'
,float('0.47')
可以是0.46999999999999997
。
这是由于表示浮点数的方式(请参阅此wikipedia文章)
注意:float(repr(0.47000000000000003))
或eval(repr(0.47000000000000003))
会为您提供预期的结果,但如果您需要精确度,则应使用Decimal。
答案 1 :(得分:3)
float(和double)没有无限精度。当然,操作它们时会出现舍入错误。
答案 2 :(得分:2)
同样的问题也来了quite regularly in comp.lang.python。
我认为这是一个常见问题解答,因为python在所有其他方面都是完美的;-),我们希望它能完美地运算 - 就像我们在学校教的那样。但是,任何完成数值方法课程的人都会告诉你,浮点数距离完美还有很长的路要走。
答案 3 :(得分:0)
通过这个例子 我认为当你划分
时,这是Python中的一个错误 >>> print(int(((48/5.0)-9)*5))
2
简单的方法,我通过这个解决了这个问题
>>> print(int(round(((48/5.0)-9)*5,2)))
3