Python 3四舍五入函数近似值
我在使用Python的四舍五入函数时遇到了一个问题。当我用两位小数来四舍五入,比如执行 round(0.715,2)
,结果是0.71;同样,当我执行 round(0.615,2)
,结果是0.61。但是,当我执行 round(0.515,2)
时,结果却是0.52;对于 round(0.915,2)
,结果也是0.92。
有人能解释一下这个情况吗?
2 个回答
1
在普通电脑中,浮点数并不是完全准确的。所以当你输入5.15时,电脑可能会把它理解成5.1499999999……或者其他一些微小的变化。当像Python这样的编程语言打印这些数字时,它们会把数字四舍五入到某个小数位数,这样你就会觉得你得到了一个准确的数字,但其实并不是这样。
另请参见:http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html(“每个计算机科学家都应该知道的浮点运算”)
9
这是因为你使用的数字是用 浮点数 来表示的,而浮点数只能大约表示16位有效数字。你会发现,前两个数字稍微小了一点,而后两个数字稍微大了一点。
>>> "%.20f"%0.715
'0.71499999999999996891'
>>> "%.20f"%0.615
'0.61499999999999999112'
>>> "%.20f"%0.515
'0.51500000000000001332'
>>> "%.20f"%0.915
'0.91500000000000003553'
如果你需要更准确的结果,可以考虑使用 decimal
模块。