我有数字(十进制)我想将它舍入到“最接近的50”:
如何用java / groovy做到这一点?
答案 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,你可以在这里运行它来测试它。
答案 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;
}