Округление до ближайшего 0,25 без банковского округления в Python 3 - PullRequest
0 голосов
/ 10 июня 2018

Я хотел бы округлить серию чисел, как это:

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

Я слышал, что могу использовать раунд (x * 4) / 4, чтобы найти ближайшую единицу 0,25.Тем не менее, на границе будут некоторые проблемы с этой функцией

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

Могу ли я в любом случае правильно выполнить вышеуказанное округление?Спасибо

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

Модуль 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')
0 голосов
/ 10 июня 2018

Просто умножьте на 4, округлите, затем разделите на 4.

...