四舍五入到 5 的倍数
Rounding to multiples of 5
我想让我的程序更加精确,并考虑到没有 1、2、7 值的硬币(只有 5、10、20、50、100..),所以有称为四舍五入到五福林的规则。
示例:
111,112 -> 110
113,114 -> 115
116,117 -> 115
118,119 -> 120
我的问题是我应该在 JAVA 中使用哪个函数来达到我的目标并获得正确的舍入值?
你可以这样写:
int roundTo5(int value)
{
return ((value + 2) / 5) * 5;
}
这采用任何 forint 值,加 2 然后除以 5。这得到一个 "floor rounding" 整数并再次乘以 5。
0 → 2 → 0 → 0
1 → 3 → 0 → 0
2 → 4 → 0 → 0
3 → 5 → 1 → 5
4 → 6 → 1 → 5
5 → 7 → 1 → 5
6 → 8 → 1 → 5
7 → 9 → 1 → 5
8 → 10 → 2 → 10
9 → 11 → 2 → 10
说 a 是你想要舍入的整数或浮点数 :
int round = Math.round( ((float)(a)/5) * 5);
如果声明为浮点数,则可以跳过类型转换。
您可以使用以下方法。
public static int roundTo5(int n) {
int t = n % 10; // get modulo 10 of n
switch (t) {
case 0:
case 1:
case 2:
// result will be n - n%10;
return n - t;
case 3:
case 4:
case 5:
case 6:
case 7:
// result will be n - n %10 + 5
return n - t + 5;
case 8:
case 9:
// result will be n - n%10 + 10;
return n - t + 10;
}
return 0;
}
我不明白为什么没有提到这一点,但以下似乎应该能很好地完成这项工作:
5 * (Math.round(n / 5))
我想让我的程序更加精确,并考虑到没有 1、2、7 值的硬币(只有 5、10、20、50、100..),所以有称为四舍五入到五福林的规则。
示例:
111,112 -> 110
113,114 -> 115
116,117 -> 115
118,119 -> 120
我的问题是我应该在 JAVA 中使用哪个函数来达到我的目标并获得正确的舍入值?
你可以这样写:
int roundTo5(int value)
{
return ((value + 2) / 5) * 5;
}
这采用任何 forint 值,加 2 然后除以 5。这得到一个 "floor rounding" 整数并再次乘以 5。
0 → 2 → 0 → 0
1 → 3 → 0 → 0
2 → 4 → 0 → 0
3 → 5 → 1 → 5
4 → 6 → 1 → 5
5 → 7 → 1 → 5
6 → 8 → 1 → 5
7 → 9 → 1 → 5
8 → 10 → 2 → 10
9 → 11 → 2 → 10
说 a 是你想要舍入的整数或浮点数 :
int round = Math.round( ((float)(a)/5) * 5);
如果声明为浮点数,则可以跳过类型转换。
您可以使用以下方法。
public static int roundTo5(int n) {
int t = n % 10; // get modulo 10 of n
switch (t) {
case 0:
case 1:
case 2:
// result will be n - n%10;
return n - t;
case 3:
case 4:
case 5:
case 6:
case 7:
// result will be n - n %10 + 5
return n - t + 5;
case 8:
case 9:
// result will be n - n%10 + 10;
return n - t + 10;
}
return 0;
}
我不明白为什么没有提到这一点,但以下似乎应该能很好地完成这项工作:
5 * (Math.round(n / 5))