Python float - str - float怪异

时间:2009-11-22 10:28:18

标签: python string floating-point floating-accuracy ieee-754

>>> float(str(0.65000000000000002))

0.65000000000000002

>>> float(str(0.47000000000000003))

0.46999999999999997     ???

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

我在Windows上使用Python 2.5.4。

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)

这是Python FAQ

同样的问题也来了quite regularly in comp.lang.python

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

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

答案 3 :(得分:0)

通过这个例子 我认为当你划分

时,这是Python中的一个错误
    >>> print(int(((48/5.0)-9)*5))
    2

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

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