Python float - str - float怪异

Sha*_*run 10 python string floating-point floating-accuracy ieee-754

>>> float(str(0.65000000000000002))

0.65000000000000002

>>> float(str(0.47000000000000003))

0.46999999999999997     ???
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?如何转换0.47000000000000003为字符串并将结果值恢复为浮点数?

我在Windows上使用Python 2.5.4.

小智 16

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

注意:float(repr(0.47000000000000003))或者eval(repr(0.47000000000000003))会给你预期的结果,但如果你需要精度,你应该使用Decimal.