为什么round(5/2)返回2?

时间:2015-06-16 13:20:51

标签: python python-3.x python-3.4

使用python 3.4.3,

round(5/2) # 2

不应该返回3?

我尝试使用python 2,它给了我正确的结果

round(5.0/2) # 3

如何实现正确的浮标舍入?

3 个答案:

答案 0 :(得分:5)

  

如果两个倍数相等,则向均匀方向进行舍入   选择(例如,圆形(0.5)和圆形(-0.5)都是0,和   圆(1.5)是2)。

round功能引用documentation。 希望这会有所帮助:)

在旁注中,我建议您在面对这类问题时始终阅读文档(haha

答案 1 :(得分:4)

对于Python 3来说,向右转是正确的行为。根据Python 3 documentation for round()

  

...如果两个倍数相等,则向均匀选择进行舍入(例如,圆形(0.5)和圆形(-0.5)均为0,圆形(1.5)为2)

由于2.5同样接近2和3,因此它会向下舍入为2。

在Python 2中,docs for round()状态:

  

...如果两个倍数相等,则舍入远离0(因此,例如,round(0.5)为1.0,round(-0.5)为-1.0)

由于2.5同样接近2和3,因此它会向上舍入到3(远离零)。

如果你想控制数字轮数,那么最好的方法就是我学会在Applesoft BASIC时代回归数字的方式:

10 X = 5
15 PRINT "ROUND(" X "/2) = " (INT((X/2)+0.5))
20 X = 4.99
25 PRINT "ROUND(" X "/2) = " (INT((X/2)+0.5))
嗯......这样做:

>>> x = 5 / 2
>>> print(x)
2.5
>>> y = int(x + 0.5)
>>> print(y)
3
>>> x = 4.99 / 2
>>> print(x)
2.495
>>> y = int(x + 0.5)
>>> print(y)
2
>>>

答案 2 :(得分:0)

来自doc

  

round(number [,ndigits]) - > number将数字舍入到给定的数字   精度十进制数字(默认为0位)。这会返回一个int   当用一个参数调用时,否则与数字相同。   ndigits可能是负数。

所以

>>>round(5/2)
2
>>>round(5.0/2, 1)
2.5