如何在Python中正确舍入半浮点数?
我面临该round()
功能的奇怪行为:
for i in range(1, 15, 2):
n = i / 2
print(n, "=>", round(n))
此代码打印:
0.5 => 0
1.5 => 2
2.5 => 2
3.5 => 4
4.5 => 4
5.5 => 6
6.5 => 6
我希望浮动值总是四舍五入,但是取整到最接近的偶数。
为什么会出现这种行为?获得正确结果的最佳方法是什么?
我尝试使用,fractions
但结果是相同的。
-
“ 数字类型” 部分明确记录了此行为:
round(x[, n])
x 四舍五入为n位数字,四舍五入为偶数。如果省略n,则默认为0。注意 四舍五入到一半 。这也被称为 银行家四舍五入 ; 通过四舍五入到最接近的 偶数,
您可以平均舍入误差,而不必总是向上或向下舍入(复合舍入误差)。如果需要对舍入行为进行更多控制,请使用
decimal
模块,该模块可让您确切指定应使用的舍入策略。例如,从一半取整:
>>> from decimal import localcontext, Decimal, ROUND_HALF_UP >>> with localcontext() as ctx: ... ctx.rounding = ROUND_HALF_UP ... for i in range(1, 15, 2): ... n = Decimal(i) / 2 ... print(n, '=>', n.to_integral_value()) ... 0.5 => 1 1.5 => 2 2.5 => 3 3.5 => 4 4.5 => 5 5.5 => 6 6.5 => 7