在Python 3中没有银行家舍入的情况下舍入到最接近的0.25

时间:2018-06-10 02:59:57

标签: python python-3.x decimal rounding

我想围绕一系列这样的数字:

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)

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

2 个答案:

答案 0 :(得分:4)

简单地乘以4,然后除以4。

答案 1 :(得分:3)

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')