Есть ли встроенная функция, которая может округляться, как показано ниже?
10 -> 10
12 -> 10
13 -> 15
14 -> 15
16 -> 15
18 -> 20
Я не знаю стандартной функции в Python, но это работает для меня:
def myround(x, base=5):
return int(base * round(float(x)/base))
def myround(x, base=5):
return base * round(x/base)
Легко понять, почему вышесказанное работает. Вы хотите убедиться, что ваше число, деленное на 5, является целым, правильно округленным. Итак, сначала мы делаем именно это ( round(float(x)/5)
где float
это необходимо только в Python2), а затем, поскольку мы делим на 5, мы также умножаем на 5. Последнее преобразование в int
потому что round()
возвращает значение с плавающей точкой в Python 2.
Я сделал функцию более общей, задав ей base
параметр, по умолчанию равный 5.
x // base * base
floor()
иceil()
вместо литья:base * floor(x/base)
math.floor
иmath.ceil
не разрешать использование с пользовательской базой, поэтому предпочтение не имеет значения.Для округления до нецелых значений, таких как 0,05:
Я нашел это полезным, поскольку я мог просто выполнить поиск и замену в моем коде, чтобы изменить «round (» на «myround (»), не меняя значения параметров.
источник
def my_round(x, prec=2, base=0.05): return (base * (np.array(x) / base).round()).round(prec)
который также принимает массивы.Это просто вопрос масштабирования
источник
Удаление «отдыха» будет работать:
Если значение является целым:
Как функция:
источник
источник
round (x [, n]): значения округляются до ближайшего кратного 10 от степени минус n. Так что, если n отрицательно ...
Поскольку 10 = 5 * 2, вы можете использовать целочисленное деление и умножение с 2, а не деление с плавающей запятой и умножение с 5,0. Не то, чтобы это имело большое значение, если вы не любите немного сдвигаться
источник
Извините, я хотел прокомментировать ответ Алока Сингхая, но он не позволит мне из-за отсутствия репутации = /
В любом случае, мы можем обобщить еще один шаг и пойти:
Это позволяет нам использовать нецелые основания, как
.25
и любые другие дробные основания.источник
Модифицированная версия divround :-)
источник
Использование:
Он не использует умножение и не будет конвертировать из / в число с плавающей точкой.
Округление до ближайшего кратного 10:
Как видите, он работает как для отрицательных, так и для положительных чисел. Галстуки (например, -15 и 15) всегда будут округлены вверх.
Аналогичный пример, который округляет до ближайшего кратного 5, демонстрируя, что он также ведет себя как ожидается для другой «базы»:
источник
В случае, если кому-то нужно «финансовое округление» (0,5 раунда всегда вверх):
Согласно документации, другие варианты округления:
По умолчанию Python использует ROUND_HALF_EVEN, поскольку он имеет некоторые статистические преимущества (округленные результаты не смещены).
источник
Для целых чисел и с Python 3:
Производство:
источник
Как насчет этого:
источник
Следующий кратный из 5
Рассмотрим 51 необходимо преобразовать в 55:
источник
Вот мой код C Если я правильно понимаю, должно быть что-то вроде этого;
и это также округляет до ближайшего кратного 5 вместо простого округления;
источник
Другой способ сделать это (без явных операторов умножения или деления):
источник
Вы можете «обмануть»
int()
округление вместо округления, добавив0.5
к числу, которое вы передаетеint()
.источник