我是Python的初学者,我有一个问题
为什么舍入一个数字,如5.5,7.5,(任何).5与奇数整数部分应用round(num)
正常工作(规则5/4),但舍入数字像(任何).5与非奇整数部分由相同的函数只返回一个整数部分?
(但是如果我们在这个十进制数字中添加一个像0.000000001这样的小数字就可以正常工作了)
我的意思是下一个:
round(9.5)
返回10,这是正确的。但
round(8.5)
返回8,但不正确。和
round(8.5 + 0.0000000000001)
返回9。
为什么它不正确?
我在Windows上使用Python 3.2.2。
答案 0 :(得分:19)
与Python 2.x相比,Python 3.x对round()
函数使用Banker's rounding。
这是documented行为:
[I] f两个倍数相等,向均匀选择进行舍入(例如,圆形(0.5)和圆形(-0.5)均为0,圆形(1.5)为2)。 / p>
由于浮点数本质上只是近似值,所以如何处理“精确”半整数并不重要 - 无论如何,在前面的计算中总会出现舍入误差。
修改:要获得旧的舍入行为,您可以使用
def my_round(x):
return int(x + math.copysign(0.5, x))