Python float - str - 浮动怪异

问题描述

>>> float(str(0.65000000000000002))

0.65000000000000002

>>> float(str(0.47000000000000003))

0.46999999999999997     ???

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

What is going on here? How do I convert 0.47000000000000003 to string and the resultant value back to float?

我在 Windows 上使用 Python 2.5.4.

I am using Python 2.5.4 on Windows.


解决方案

str(0.47000000000000003)'0.47'float('0.47') 可以是 0.46999999999999997.这是由于浮点数的表示方式(参见这篇 wikipedia 文章)

str(0.47000000000000003) give '0.47' and float('0.47') can be 0.46999999999999997. This is due to the way floating point number are represented (see this wikipedia article)

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

Note: float(repr(0.47000000000000003)) or eval(repr(0.47000000000000003)) will give you the expected result, but you should use Decimal if you need precision.

相关文章