Python 3 的 round 函数近似值问题

3
我在使用Python的round函数时遇到了问题。当我执行round(0.715,2)来保留两位小数时,答案是0.71; 同样地,当我执行round(0.615,2)时,结果为0.61。但是,当我执行round(0.515,2)时,答案是0.52,对于round(0.915,2),结果为0.92。
请问有人能解释一下这个现象吗?

我并不直接打印这些数字,而是计算它们(sims)。 - user2146889
在我操作Python的终端中,我输入round(0.515),它返回0.52,再输入round(0.616),它返回0.61。这不是一个打印函数。 - user2146889
2个回答

9
这是由于你使用的数字采用了浮点数近似。只有约16个有效十进制数字。正如你所看到的,前两个数字略微偏低,而后两个数字略微偏高。
>>> "%.20f"%0.715
'0.71499999999999996891'
>>> "%.20f"%0.615
'0.61499999999999999112'
>>> "%.20f"%0.515
'0.51500000000000001332'
>>> "%.20f"%0.915
'0.91500000000000003553'

如果你需要更好的行为,考虑使用decimal模块。

1
Typical计算机实现的浮点数并不精确。因此,当你写5.15时,它可能实际上与计算机中的5.1499999999相同...或者可能是其他一些微小的变化。像Python这样的编程语言在打印这些数字时,决定四舍五入到某个小数位数,所以你认为你有一个精确的数字,但实际上并不是。另请参见:http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html("计算机科学家应该了解的浮点运算知识")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接