如何舍入到最近的50或100?

时间:2014-08-22 01:09:25

标签: java groovy

我有数字(十进制)我想将它舍入到“最接近的50”:

  1. 122 =>圆到150
  2. 177 =>圆到200
  3. 157 =>圆到200
  4. 57 =>轮到100;
  5. 37 =>一轮到50;
  6. 1557 =>圆到1600
  7. 3537 =>轮到3550
  8. 如何用java / groovy做到这一点?

7 个答案:

答案 0 :(得分:6)

我相信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

答案 1 :(得分:5)

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

答案 2 :(得分:3)

您好我为您制作了这个剧本

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

答案 3 :(得分:2)

四舍五入到最接近的50(向上或向下)。你可以转换为浮动除以你想要舍入的数量,使用Math.round然后再乘以:

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

这只是轮次,如果你想把它提升到与你的例子匹配的下一个50,你可以做同样的事情,但使用Math.ceil方法

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

答案 4 :(得分:1)

你可能会想到,你可以四舍五入到最接近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

答案 5 :(得分:1)

(x+25)/50*50

我的回答太短,因为我实际上发布了最简单的方法,所以你也得到了这句话。

编辑:我回答了你问的问题,而不是你的例子说明的问题。留下这个答案,以防其他人有你的问题,并试图阅读答案。

答案 6 :(得分:1)

这里是 Java:

public static void main(String[] args) {
    
    System.out.println(round_to_nearest_50(**yournumber**)); // put there your number

}

private static int round_to_nearest_50(int number) { // just keep this method
    int ergebnis = number;
    if (number % 50 == 0) {}
    else if (number % 50 < 25) { ergebnis -= 50 - number % 50; }
    else if (number % 50 >= 25) {ergebnis += 50 - number % 50; }
    return ergebnis;
}