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)
无论如何,我可以正确地进行上述舍入吗?谢谢
该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)