python 3圆函数逼近

时间:2013-03-08 03:26:25

标签: python math python-3.x decimal rounding

我遇到了python圆函数的问题。当我通过执行round(0.715,2)舍入2位数时,答案为0.71,类似于执行round(0.615,2)时,结果为0.61。但是当我执行round(0.515,2)时,它给出0.52,类似于round(0.915,2),结果为0.92。

有人可以解释一下吗?

2 个答案:

答案 0 :(得分:9)

这是由于您使用的数字的floating point近似值所致。只有~16个有效十进制数字。如你所见,前两个稍微低于,而后两个稍微超过

>>> "%.20f"%0.715
'0.71499999999999996891'
>>> "%.20f"%0.615
'0.61499999999999999112'
>>> "%.20f"%0.515
'0.51500000000000001332'
>>> "%.20f"%0.915
'0.91500000000000003553'

如果您需要更好的表现,请考虑使用decimal模块

答案 1 :(得分:1)

典型计算机中实现的浮点数并不准确。因此,当您编写5.15时,它实际上可能与5.1499999999相同(对于计算机)....或者可能是其他一些轻微的变化。当像Python这样的编程语言打印这些数字时,他们决定四舍五入到一些小数位,所以你认为你有一个确切的数字,但你没有。

另见:http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html(“每个计算机科学家应该知道浮点算术的内容”)