Ответ 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
>>>
У меня возникает следующая проблема:
Учитывая различные числа, например:
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
>>> 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
>>>
Это решение общего назначения, которое позволяет округлять до произвольных разрешений. Для вашего конкретного случая вам просто нужно предоставить 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
Нет встроенного, но такая функция тривиальна для записи
def roundQuarter(x):
return round(x * 4) / 4.0
Решение paxdiablo может быть немного улучшено.
def roundPartial (value, resolution):
return round (value /float(resolution)) * resolution
поэтому теперь функция: "чувствительный к типу данных".