我必须输入一个数字并将最后一位数字舍入为0或5。
我试过Math.ceil
或Math.floor
,但那些都没有用。
Math.ceil
和Math.floor
用于浮点数(如Double
s)。你想做什么没有内置功能,但这应该有效
public static int round(int original) {
if original % 10 <= 2 {
return original - (original % 10)
} else if original % 10 <= 7 {
return original - (original % 10) + 5
}
return original - (original % 10) + 10
}
如果您希望它使用负数,请使用:
public static int round(int original) {
if original % 10 <= 2 {
return original - (original % 10)
} else if original % 10 <= 7 {
return original - (original % 10) + 5
} else if original % 10 <= 9 {
return original - (original % 10) + 10
} else if original % 10 >= -2 {
return original - (original % 10)
} else if original % 10 >= -7 {
return original - (original % 10) - 5
}
return original - (original % 10) - 10
}
显然,你不能只复制和粘贴这段代码,因为你需要将它放在一个类中,并可能改变可见性和static
ness(public static
)部分。
要使用它,请致电int rounded = round(input)
希望这可以帮助!
要将数字int n
舍入到最接近的5的倍数:
((n + 2) / 5) * 5;
不需要复杂的逻辑。
更一般地说,将int n
舍入到int m
的倍数
((n + (m/2)) / m) * m;
如果你也想使用负数,它会变成:
((n + (n >= 0 ? 2 : -2)) / 5) * 5;
((n + (n >= 0 ? (m/2) : -(m/2)) / m) * m;
这是一个简单的函数,可以舍入到你想要的任何值,它需要两个参数,其中一个是圆形的数字。另一个是(在你的情况下是5)精简的舍入。
public static double roundTo(double toRound, double precision){
double holder = toRound/precision;
int result = (int) Math.round(holder);
return result*precision;
}
qazxsw poi / qazxsw poi将浮点数舍入为最接近的整数。他们根本无法做你想要的,也就是为整数找到一些最接近的倍数。
您可以采取各种方法来解决此问题。我认为这是家庭作业吗?关键是不要找到一个库调用来做一个单行(这有助于我很确定没有开箱即用的这种库调用),重点是编写一些基本代码来做到这一点。
这是一种方式:
您可以使用Math.ceil
(x modulo 10)获取最后一位数。请注意Math.floor
是x % 10
,而不是-15 % 10
),然后使用-5
构造或一些5
/ switch
语句根据最后一位数做正确的事。
或者更棘手的方式:
当你在java中对2个整数进行除法时,结果总是四舍五入为整数,只是删掉逗号后面的位(所以对于正数,它向下舍入)。结束最后一个数字始终为0或5的数字的一种方法是除以5,再次乘以5。但你确实需要找出一个策略,以确保if
成为else if
而不是13
,所以你必须在开始分割并乘以5之前添加一些东西。我会把它作为练习留给你找出如何做到这一点以及添加什么。
没有内置的方法来实现这一点。你必须自己编写代码。
一种方法可以是计算mod 10并添加差异:
15
事实上,这是四舍五入到最接近的5倍。四舍五入。
10
有了这个,你应该能够创建一个解决方案。