非奇数的Python中的舍入错误?

发布于 2021-01-29 18:07:03

我是Python的初学者,我有一个问题。
为什么用奇数整数部分round(num)四舍五入像5.5、7.5((任何).5)这样的数字正确工作(规则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
被浏览
46
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    Python 3.x都有,相比之下到Python
    2.x中,使用银行家舍入round()功能。

    这是记录的行为:

    如果两个倍数相等接近,则四舍五入取整为偶数选择(例如,round(0.5)和round(-0.5)均为0,而round(1.5)为2)。

    由于浮点数本质上仅是近似值,因此如何对待“精确的”半整数无关紧要-前面的计算中总会有舍入误差。

    编辑 :要获取旧的舍入行为,可以使用

    def my_round(x):
        return int(x + math.copysign(0.5, x))
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看