Округление до ближайших 100

Первое число необходимо округлить до ближайшего второго числа. Есть много способов сделать это, но какой алгоритм самый лучший и самый короткий? Кто готов принять вызов :-)

1244-> 1200
1254-> 1300
123-> 100
178-> 200
1576-> 1600
1449-> 1400
123456-> 123500
654321-> 654300
23-> 00
83-> 100

Ответов (7)

Решение

Для ввода n :

(n + 50) / 100 * 100

с использованием целочисленного деления.

Обратите внимание, что во многих языках / библиотеках уже есть функции для этого.

100 * round(n/100.0)

Я знаю, что это поздно, но вот что я обычно настраиваю, когда имею дело с округлением до ближайшего nTh:

Number.prototype.roundTo = function(nTo) {
    nTo = nTo || 10;
    return Math.round(this * (1 / nTo) ) * nTo;
}
console.log("roundto ", (925.50).roundTo(100));

Number.prototype.ceilTo = function(nTo) {
    nTo = nTo || 10;
    return Math.ceil(this * (1 / nTo) ) * nTo;
}
console.log("ceilTo ", (925.50).ceilTo(100));

Number.prototype.floorTo = function(nTo) {
    nTo = nTo || 10;
    return Math.floor(this * (1 / nTo) ) * nTo;
}
console.log("floorTo ", (925.50).floorTo(100));

Я использую Number.ceilTo (..), потому что я работаю с Canvas и пытаюсь определить, насколько далеко нужно масштабировать.

Согласно приведенному выше комментарию Павана Пиллаи, округление до ближайшего 100-го в Javascript:
100 * Math.floor((foo + 50) / 100);

Это сделает это, если вы используете целочисленную математику:

n = (n + 50) / 100 * 100

Конечно, вы не указали поведение, например, 1350 и 1450, поэтому я решил округлить. Если вам нужно округление до четности, это не сработает.

Это домашнее задание?

Как правило, модифицируйте 100, затем, если> 50, добавьте еще и вычтите.

Круглый метод Ruby может потреблять отрицательную точность:

n.round(-2)

В этом случае -2 округляет до ближайшей сотни.