Python - округление по кварталам

У меня возникает следующая проблема:

Учитывая различные числа, например:

10.38

11.12

5,24

9,76

существует ли уже "встроенная" функция для округления до ближайшего этапа 0,25, например, например:

10.38 → 10.50

11.12 → 11.00

5,24 → 5,25

9.76 → 9-75?

Или я могу продолжить и взломать функцию, которая выполняет желаемую задачу?

Спасибо заранее и

с наилучшими пожеланиями

Dan

Ответы

Ответ 1

>>> def my_round(x):
...  return round(x*4)/4
... 
>>> 
>>> assert my_round(10.38) == 10.50
>>> assert my_round(11.12) == 11.00
>>> assert my_round(5.24) == 5.25
>>> assert my_round(9.76) == 9.75
>>> 

Ответ 2

Это решение общего назначения, которое позволяет округлять до произвольных разрешений. Для вашего конкретного случая вам просто нужно предоставить 0.25 в качестве разрешения, но возможны другие значения, как показано в тестовых случаях.

def roundPartial (value, resolution):
    return round (value / resolution) * resolution

print "Rounding to quarters"
print roundPartial (10.38, 0.25)
print roundPartial (11.12, 0.25)
print roundPartial (5.24, 0.25)
print roundPartial (9.76, 0.25)

print "Rounding to tenths"
print roundPartial (9.74, 0.1)
print roundPartial (9.75, 0.1)
print roundPartial (9.76, 0.1)

print "Rounding to hundreds"
print roundPartial (987654321, 100)

Выводится:

Rounding to quarters
10.5
11.0
5.25
9.75
Rounding to tenths
9.7
9.8
9.8
Rounding to hundreds
987654300.0

Ответ 3

Нет встроенного, но такая функция тривиальна для записи

def roundQuarter(x):
    return round(x * 4) / 4.0

Ответ 4

Решение paxdiablo может быть немного улучшено.

def roundPartial (value, resolution):
return round (value /float(resolution)) * resolution

поэтому теперь функция: "чувствительный к типу данных".