【发布时间】:2014-02-17 20:58:06
【问题描述】:
在 Python 2.x 中,内置的 round 具有以下行为:
如果两个倍数相等,则舍入 远离 0(例如,round(0.5) 为 1.0,round(-0.5) 为 -1.0)
在 Python 3.x 中,this has changed 更常见:
如果两个倍数相等,则舍入向偶数选择(例如,round(0.5) 和 round(-0.5) 均为 0,round(1.5) 为2).
有没有一种简单的方法可以在 Python 2.x 中实现这种行为?不幸的是,future_builtins 模块不包括这个。也许我还没有找到另一个类似的模块?或者,另一种将 Python 3.x 函数拉入 Python 2.x 的方法?
显然,我可以编写一个产生所需行为的新函数,但我更好奇是否存在使用实际 Python 3.x 函数的解决方案,以避免增加不必要的复杂性和需要维护的代码。
【问题讨论】:
-
我没有意识到 3.x 的行为是一回事。我想在某个地方有一个无休止的长邮件列表线程......
-
@AndrewGorcester:几乎可以肯定。目的(在任何给定情况下可能合适,也可能不合适)是避免在任何方向上引入偏见。例如,想象一个小数点后有 2 位数字的设定值(也就是说,它们被测量到一个单位的 1/100)。如果您从 0 舍入,并且值都是正数,并且 100 个可能的小数部分中的每一个均等表示,那么您将平均值增加 1/200。低于最初的准确性,但系统性,因此有时相当糟糕。 en.wikipedia.org/wiki/Rounding#Round_half_to_even
-
是的,请参阅IEEE 754 Rounding Rules。
-
numpy 依赖会是个问题吗?
-
@AndrewGorcester:我想我找到了邮件列表线程的开头:mail.python.org/pipermail/python-list/2008-April/509669.html
标签: python