Как округлить до ближайших 50 или 100?

У меня есть числа (в десятичной форме), я хочу округлить его до "ближайших 50":

  1. 122 => круглый до 150
  2. 177 => круглый до 200
  3. 157 => круглый до 200
  4. 57 => раунд до 100;
  5. 37 => раунд до 50;
  6. 1557 => круглый до 1600
  7. 3537 => раунд до 3550

как это сделать с java/groovy?

6 ответов

Groovy x + (50 - (x % 50?: 50)):

def round50up = { int x ->
 x + ( 50 - ( x % 50 ?: 50 ) )
}

assert round50up( 122 ) == 150 
assert round50up( 177 ) == 200 
assert round50up( 157 ) == 200 
assert round50up( 57 ) == 100 
assert round50up( 37 ) == 50 
assert round50up( 1557 ) == 1600 
assert round50up( 3537 ) == 3550 
assert round50up( 100 ) == 100 
assert round50up( 200 ) == 200 
assert round50up( 250 ) == 250

Проверьте его here.


Я считаю, что решение djechlin почти правильно, он просто не использовал некоторые части.

(x + 49)/50 * 50;

Это работает, потому что в Java результат целочисленного деления является целым числом (результат усечен). Чтобы объяснить мне, вот ваши примеры с дополнительным примером для числа, которое уже кратно 50:

122 + 49 => 171 / 50 => 3 * 50 => 150
177 + 49 => 226 / 50 => 4 * 50 => 200
157 + 49 => 206 / 50 => 4 * 50 => 200
57 + 49 => 106 / 50 => 2 * 50 => 100
37 + 49 => 86 / 50 => 1 * 50 => 50
1557 + 49 => 1606 / 50 => 32 * 50 => 1600
3537 + 49 => 3586 / 50 => 71 * 50 => 3550
150 + 49 => 199 / 50 => 3 * 50 => 150


Привет, я сделал этот скрипт для вас

function roundToNearest(x) {
 if (x%50 < 25) {
 return x - (x%50); 
 }
 else if (x%50 > 25) {
 return x + (50 - (x%50)); 
 }
 else if (x%50 == 25) {
 return x + 25; //when it is halfawy between the nearest 50 it will automatically round up, change this line to 'return x - 25' if you want it to automatically round down
 } 
}

console.log(roundToNearest(701));

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

http://repl.it/languages/JavaScript


Для округления до ближайшего 50 (вверх или вниз). вы можете конвертировать в float divide на сумму, которую хотите объединить, использовать Math.round, а затем умножить резервную копию:

int orgVal = 122;
 Math.round((float)orgVal/50f)*50;

Это только раунды, если вы хотите поднять его до следующих 50, которые соответствуют вашим примерам, вы можете сделать то же самое, но использовать метод Math.ceil

int orgVal = 122;
 (int)Math.ceil((float)orgVal/50f)*50;


(x+25)/50*50

Мой ответ слишком короткий, потому что я опубликовал простейший способ сделать это, так что вы также получите это предложение.

Изменение: я отвечаю на вопрос, который вы задали, а не то, что иллюстрируют ваши примеры. Оставляя этот ответ, если у кого-то еще есть свой вопрос и он пытается прочитать ответы.


Вы округлите до ближайшего кратного 50 или 100, я думаю. Пытаться:

x - ваш вход.

int roundTo = 0; // this will serve as the value to round off to 
if(x%50 == 0){
 roundTo = x; // do nothing as x is already a multiple of 50
}
else{
roundTo = ((x/50) + 1) * 50; 
}

затем используйте это, чтобы получить округленное значение:

x = x + (roundTo - x);

пример:

x is 49;
roundTo = 50 // (49/50 +1) * 50
x = 49 + (50 - 49)
x = 50

 x = 160
 roundTo = 200 // (160/50 + 1) * 50
 x = 160 + (200 - 160)
 x = 160

licensed under cc by-sa 3.0 with attribution.