Подтвердить что ты не робот

.NET метод округления числа до ближайшего кратного другого номера?

Я ищу метод, который может округлять число до ближайшего кратного другого. Это аналогичное квантование.

Eg. Если я хочу округлить 81 до ближайшего кратного 20, он должен вернуть 100.

Есть ли метод встроенного метода в .NET framework, который я могу использовать для этого?

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

4b9b3361

Ответ 1

Да, целочисленная арифметика.

Чтобы округлить m до следующего кратного n, используйте ((m + n-1)/n) * n

Ответ 2

public static int RoundUp(int num, int multiple)
{
  if (multiple == 0)
    return 0;
  int add = multiple / Math.Abs(multiple);
  return ((num + multiple - add) / multiple)*multiple;
}


static void Main()
{
  Console.WriteLine(RoundUp(5, -2));
  Console.WriteLine(RoundUp(5, 2));
}

/* Output
 * 4
 * 6
*/

Ответ 3

Ответ Ли хороший, но он должен был быть:

t = m + n - 1; return (t - (t % m));

Обратите внимание на изменение от N до M. Операцию modulo следует выполнять с помощью множителя (m), а не с номером (n).

Ответ 4

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

t = m + n - 1; return (t - (t% n));

Конечно, если вы можете ограничить свое значение значением 2 ^ n, то операция модуля также может быть устаревшей в пользу ее логического эквивалента (обычно "&" ).

Кстати, функция "RoundUp", проиллюстрированная выше, серьезно испорчена и будет корректно округляться, когда {(m% n) == (n - 1)}; округление является неявным для целочисленного деления и как таковое не требует компенсации.