Раунд до ближайшего кратного числа

Есть ли идиоматический способ округления до ближайшего кратного числа, за исключением округления вверх и вниз и просмотра ближайшего?

Предположим, что только целые числа:

number   multiple   result
12       5          10
13       5          15
149      10         150

Ответ 1

Добавьте половину из нескольких, затем округлите вниз.

result = ((number + multiple/2) / multiple) * multiple;

или

result = number + multiple/2;
result -= result % multiple;

Это округляет, если число точно посередине. Возможно, вам понадобится настроить расчет, если вам нужно другое поведение в этом случае. Кроме того, будьте осторожны при переполнении, если number может находиться в верхней части диапазона типов.