Самый быстрый способ - разделить на 5, округлить, а затем умножить на 5. Это чисто математический факт, что это сработает.
5*round(n/5)
И в этом нет необходимости Если оператор решает, когда использовать floor
или ceil
, поскольку round
уже по умолчанию использует этот лог c.
РЕДАКТИРОВАТЬ: Как указано, это работает для всех значений, кроме тех, которые заканчиваются в 2.5, когда требуется что это округляется (на практике многим примерам это не понадобится).
Поскольку ответ Эшвина уже достиг этого, я дам исправление, чтобы сделать это в одной строке без определения функции, хотя это не очень красиво. :
5 * (int(x/5) + 1 - round(x/5 % 1))
Или немного чище, используя ceil
:
5*(math.ceil(x/5) - round(x/5 % 1))
, используя тот факт, что раунд ведет себя так, как мы хотели бы сверху. Более того, определите:
def my_round(x): return int(x + 1) - round(x % 1)
def round5(x): return 5*my_round(x/5)
, чтобы «исправить» функцию округления и создать красивую функцию round5
в 2 строки. Это то, что я бы сделал.