如何在Python中正确舍入半浮点数?

发布于 2021-01-29 14:10:34

我面临该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但结果是相同的。

关注者
0
被浏览
150
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    数字类型” 部分明确记录了此行为:

    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
    


知识点
面圈网VIP题库

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

去下载看看