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

Afo*_*tos 4 python python-3.x python-3.4

使用python 3.4.3,

round(5/2) # 2
Run Code Online (Sandbox Code Playgroud)

它不应该返回3吗?

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

round(5.0/2) # 3
Run Code Online (Sandbox Code Playgroud)

如何才能实现正确的浮子舍入?

Dou*_* R. 5

向偶数舍入是 Python 3 的正确行为。根据 Python 3文档round()

...如果两个倍数同样接近,则向偶数选择进行舍入(因此,例如,round(0.5) 和 round(-0.5) 均为 0,round(1.5) 为 2)

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

在 Python 2 中,状态的文档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))
Run Code Online (Sandbox Code Playgroud)

嗯...做到这一点:

>>> 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
>>>
Run Code Online (Sandbox Code Playgroud)


lau*_*gri 5

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

引用该功能的文档round.希望这可以帮助 :)

在旁注中,我建议你在面对这样的问题时一直阅读文档(哈哈)