【问题标题】:Round to nearest 0.25 without banker's rounding in Python 3在 Python 3 中舍入到最接近的 0.25,没有银行家的舍入
【发布时间】:2018-06-10 02:59:57
【问题描述】:

我想像这样对一系列数字进行四舍五入:

0 -> 0
0.1 -> 0
0.125 -> 0.25
0.25 -> 0.25

我听说我可以使用 round(x*4)/4 来找到最接近的 0.25 单位。但是这个函数在边界会出现一些问题

0.125 -> 0 (with round(x*4)/4)

无论如何我可以正确地进行上述舍入吗?谢谢

【问题讨论】:

  • @coldspeed:这些问题不处理提问者正在寻找的舍入模式行为(似乎是 ROUND_HALF_UP)。
  • @user2357112 这个问题没有很好地框定,所以我真的不想重新打开它。
  • @coldspeed:现在看起来更清晰了,有了新的编辑。

标签: python python-3.x decimal rounding


【解决方案1】:

只需乘以 4,四舍五入,然后除以 4。

【讨论】:

  • @coldspeed:我不知道这是重复的。并非每个人都可以期望每次都搜索每个问题。我确实标记了大量的骗子,但不能指望看到 100% 的骗子。很高兴你看到了。
  • 咬紧牙关,这个是在我身上,实际上不是骗子。话又说回来,建议仍然存在……有点?无论如何,您可能需要修改此答案以解决 OP 的问题。
【解决方案2】:

decimal 模块可以更好地控制舍入行为。特别是,ROUND_HALF_UP 舍入模式在有最近的选项时舍入到最近的选项,当有平局时从零舍入,匹配您想要的:

>>> from decimal import Decimal, ROUND_HALF_UP
>>> def round_your_way(d):
...     return (d*4).quantize(Decimal('1'), rounding=ROUND_HALF_UP)/4
...
>>> round_your_way(Decimal('0.125'))
Decimal('0.25')
>>> round_your_way(Decimal('0.1'))
Decimal('0')
>>> round_your_way(Decimal('0.25'))
Decimal('0.25')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多