【发布时间】:2023-03-24 01:05:02
【问题描述】:
我只是在重读What’s New In Python 3.0,它说:
round() 函数舍入策略和返回类型已更改。 确切的中途情况现在四舍五入到最接近的偶数结果 远离零。 (例如,round(2.5) 现在返回 2 而不是 3.)
和 round 的文档:
对于支持 round() 的内置类型,值被四舍五入到 最接近 10 次幂减 n 的倍数;如果两个倍数是 同样接近,向偶数选择进行舍入
所以,在 v2.7.3 下:
In [85]: round(2.5)
Out[85]: 3.0
In [86]: round(3.5)
Out[86]: 4.0
正如我所料。但是,现在在 v3.2.3 下:
In [32]: round(2.5)
Out[32]: 2
In [33]: round(3.5)
Out[33]: 4
这似乎违反直觉,与我的理解相反 四舍五入(并且一定会绊倒人)。英语不是我的母语,但 在我读到这篇文章之前,我以为我知道四舍五入是什么意思:-/我确定 在引入 v3 时,一定有一些讨论 这个,但我无法在搜索中找到一个很好的理由。
- 有没有人知道为什么会变成这样?
- 是否有任何其他主流编程语言(例如,C、C++、Java、Perl, ..)进行这种(在我看来不一致)舍入?
我在这里错过了什么?
更新:@Li-aungYip 对“银行家的四舍五入”的评论给了我正确的搜索词/关键字来搜索,我发现了这个 SO 问题:Why does .NET use banker's rounding as default?,所以我会仔细阅读。
【问题讨论】:
-
不是不一致的。它说...如果介于两者之间,则四舍五入到最接近的偶数。
-
我没有时间查这个,但我相信这被称为“银行家的四舍五入”。我相信这在金融行业很常见。
-
@sberry 好吧,是的,它的行为与它自己的描述是一致的。因此,如果它说“四舍五入”是其价值的两倍并且做到了,它也是一致的 :) .. 但它似乎与通常的舍入 含义 相悖。所以我正在寻找更好的理解。
-
请注意:银行家四舍五入在金融领域并不常见。这就是我在 70 年代在小学时就被教导要四舍五入的方式:-)
标签: python python-3.x rounding