为什么在Python 3中round()和math.ceil()为负数给出不同的值?

-4 python algorithm math

为什么在Python 3中round()和math.ceil()为负数给出不同的值?

例如,

round(-5.5) = -6
round(-5.7) = -6
math.ceil(-5.5) = -5
math.ceil(-5.7) = -5
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 5

这些函数执行不同的数学运算:

  • round()将float值四舍五入到最接近的整数。如果两边的两个整数中的任何一个相距相等,则选择偶数

    在这里,最接近的整数始终为-6; 因为-5.5最接近的偶数是-6,不是-5

  • math.ceil()返回大于或等于浮点值的最小整数。

    在这里,大于输入的下一个整数始终是-5(请记住,负数从零开始递减)。

我认为您最大的困惑来自于四舍五入规则。如果选择了-4.5,您会看到round()return -4

>>> import math
>>> math.ceil(-4.5)
-4
>>> round(-4.5)
-4
Run Code Online (Sandbox Code Playgroud)

round()功能文档中

如果两个倍数相等接近,则将舍入为偶数选择(例如,round(0.5)and和round(-0.5)are 0,and round(1.5)is 2)。

将一半舍入到最接近的整数总是必须以某种方式打破束缚,并且不同的编程语言并不总是就如何做到这一点达成共识,IEEE 754标准定义了5种不同的方法。Python 3使用IEEE 754默认值并将一半舍入为偶数,因为这种方法的优点是它没有符号偏差,并且在合理的数字分布中将得到相同的平均值。