为什么在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)
这些函数执行不同的数学运算:
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(0.5)and和round(-0.5)are0,andround(1.5)is2)。
将一半舍入到最接近的整数总是必须以某种方式打破束缚,并且不同的编程语言并不总是就如何做到这一点达成共识,IEEE 754标准定义了5种不同的方法。Python 3使用IEEE 754默认值并将一半舍入为偶数,因为这种方法的优点是它没有符号偏差,并且在合理的数字分布中将得到相同的平均值。
| 归档时间: |
|
| 查看次数: |
783 次 |
| 最近记录: |