>>> float(str(0.65000000000000002))

0.65000000000000002

>>> float(str(0.47000000000000003))

0.46999999999999997     ???

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

我在 Windows 上使用 Python 2.5.4。

有帮助吗?

解决方案

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

请注意:float(repr(0.47000000000000003))eval(repr(0.47000000000000003))会得到预期的结果,但你应该使用小数如果需要的精确度。

其他提示

浮子(和双)不具有无限精度。自然地,当你对它们进行操作出现舍入误差。

这是一个 Python常见问题解答

同样的问题出现了 comp.lang.python 中经常出现 还。

我认为它是一个常见问题解答的原因是因为 python 在所有其他方面都是完美的;-),我们期望它能够完美地执行算术 - 就像我们在学校教的那样。然而,任何学过数值方法课程的人都会告诉您,浮点数距离完美还有很长的路要走。

十进制 是一个不错的选择,如果您想要更快的速度和更多的选择 gmpy 也很棒。

通过本实施例中 我认为这是在Python中的错误,当你把

    >>> print(int(((48/5.0)-9)*5))
    2

最简单的方式,通过我这

解决这个问题
    >>> print(int(round(((48/5.0)-9)*5,2)))
    3
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top