使用python 3.4.3,
round(5/2) # 2
不应该返回3?
我尝试使用python 2,它给了我正确的结果
round(5.0/2) # 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