在 Python 3 中舍入到最接近的 0.25,无需银行家舍入

din*_*nex 5 python decimal rounding python-3.x

我想对一系列数字进行四舍五入,如下所示:

0 -> 0
0.1 -> 0
0.125 -> 0.25
0.25 -> 0.25
Run Code Online (Sandbox Code Playgroud)

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

0.125 -> 0 (with round(x*4)/4)
Run Code Online (Sandbox Code Playgroud)

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

use*_*ica 4

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')
Run Code Online (Sandbox Code Playgroud)