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

nig*_*2k1 1 java groovy

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

  1. 122 =>舍入到150
  2. 177 =>舍入到200
  3. 157 =>舍入到200
  4. 57 =>舍入到100;
  5. 37 =>圆到50;
  6. 1557 =>舍入到1600
  7. 3537 =>轮到3550

如何用java/groovy做到这一点?

mal*_*per 7

我相信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
Run Code Online (Sandbox Code Playgroud)


dma*_*tro 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
Run Code Online (Sandbox Code Playgroud)

测试一下here.