11
>>> float(str(0.65000000000000002))

0.65000000000000002

>>> float(str(0.47000000000000003))

0.46999999999999997     ???

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

我在 Windows 上使用 Python 2.5.4。

4

4 回答 4

16

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

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

于 2009-11-22T10:35:48.150 回答
3

float (和 double )没有无限精度。自然,当您对它们进行操作时,会出现舍入错误。

于 2009-11-22T10:34:45.790 回答
2

这是一个Python 常见问题解答

同样的问题也经常出现在 comp.lang.python 中

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

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

于 2009-11-22T11:41:21.173 回答
0

通过这个例子,我认为这是 Python 中的一个错误,当你定义时

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

简单的方法,我通过这个解决了这个问题

    >>> print(int(round(((48/5.0)-9)*5,2)))
    3
于 2015-04-30T09:10:02.250 回答