Как округлять числа с шагом 0.25?
прошу помочь с одной задачей, есть у меня список флоатов ['14.42', '15.22', '16.10', '13.99', '15.55', '14.20', '15.03', '16.29'] и тд нужно сделать так, округлить ближнему но не целое число а дробное на .0 .25 .50 .75 1.0
- Если 14.42 ему ближе это 14.50
- или 14.20 ему ближе 14.25
- или 14.10 ему ближе 14.00
- или 15.90 ему ближе 16.00
Прошу помочь, или дать подсказки
Ответы (3 шт):
Автор решения: eri
→ Ссылка
>>> a=[14.42,14.20, 14.10, 15.90]
>>> [round(i*4)/4 for i in a]
[14.5, 14.25, 14.0, 16.0]
Автор решения: Jack_oS
→ Ссылка
Можно универсализировать функцию:
def round_custom(num, step):
return round(num/step)*step
под изменяющийся шаг:
>>> print(round_custom(15.93, 0.25))
16.0
>>> print(round_custom(15.93, 0.5))
16.0
>>> print(round_custom(15.93, 0.1))
15.9
>>> print(round_custom(15.93, 1))
16
>>> print(round_custom(15.93, 10))
20
Для вашего тесткейса:
>>> data = ['14.42', '15.22', '16.10', '13.99', '15.55', '14.20', '15.03', '16.29']
>>> step = 0.25 # степень округления, 1/4
>>> round_data = [round_custom(float(x), step) for x in data]
>>> round_data
[14.5, 15.25, 16.0, 14.0, 15.5, 14.25, 15.0, 16.25]
Автор решения: CrazyElf
→ Ссылка
Добавлю функциональный вариант (без циклов), хотя по сути тоже самое, конечно, но чуть в другой форме:
a = ['14.42', '15.22', '16.10', '13.99', '15.55', '14.20', '15.03', '16.29']
print(list(map(lambda x: round(x * 4) / 4, map(float, a))))