2009-02-25 3 views
20

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

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

+0

рубин должен быть штрафом – Senthoor

ответ

28

Для ввода n:

(n + 50)/100 * 100 

используя целочисленное деление.

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

+4

В JavaScript это сработало для меня: 100 * Math.floor ((n + 50)/100); –

0

Является ли это домашнее задание?

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

+0

Нет его дома не работы :-) – Senthoor

+0

Что, черт возьми, Брайан! mod и if-then-else, это будет очень медленно. Если вы используете целые числа, проверьте ответ Дэвида. Это неразрешенный общий способ решения этой проблемы. Он также работает с числами с плавающей запятой. –

+0

Я сам придумал этот ответ в Ruby. numbers.each {| number | помещает число + '->' + number.gsub (/ \ d \ d \ d $ /, (number [number.size-3,1] .to_i + number [number.size-2,1] .to_i/5) .to_s + '00 ')} – Senthoor

2

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

n = (n + 50)/100 * 100 

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

4

Я знаю, что в конце игры, но вот что-то я вообще набрана, когда я имею дело с того, чтобы закруглить вещи до ближайшего 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)); 

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

круглый метод
48

Руби может потреблять отрицательные Precisions:

n.round(-2)

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

+1

рубин 2.0, для победы на этом. – Dudo

+1

Гораздо лучше. Должен быть победитель. Это нативный ответ. – Merovex

+1

Узнал что-то сегодня! –

0

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

Смежные вопросы