我已经查看了很多关于舍入到最接近的数字的倍数的问题,但是我无法理解他们的方法以便将它们用于四舍五入或者使用其他语言的语言特定方法。
如果上述内容没有多大意义,可以进行更详细的解释:
示例输入:
int num1 = 67;
int num2 = 43;
预期结果:
>>round(num1) = 90
>>round(num2) = 45
答案 0 :(得分:8)
足以添加缺少的int upperround(int num, int base) {
int temp = num%base;
if (temp < 0 )
temp = base + temp;
if (temp == 0)
return num;
return num + base - temp;
:
CURL
修改强>
一般来说:
sudo apt-get install php7.0-curl
答案 1 :(得分:6)
由于人们在舍入到整数的倍数方面存在这样的问题,无论是向上/向下/最近舍入,这里都是非常简单的方法:
public static int roundDown(int value, int multiplier) {
return value / multiplier * multiplier;
}
public static int roundHalfUp(int value, int multiplier) {
return (value + multiplier / 2) / multiplier * multiplier;
}
public static int roundUp(int value, int multiplier) {
return (value + multiplier - 1) / multiplier * multiplier;
}
测试
Value Down Half Up
0 0 0 0
1 0 0 4
2 0 4 4
3 0 4 4
4 4 4 4
Value Down Half Up
0 0 0 0
1 0 0 5
2 0 0 5
3 0 5 5
4 0 5 5
5 5 5 5
负数
它们不适用于负数。 “向下舍入”通常意味着“朝向零”,不像Math.floor()
向负无穷大方向发展。
以下是可以处理负值的版本。这些与BigDecimal
使用的类似名称的RoundingMode
选项一致。
public static int roundDown(int value, int multiplier) {
if (multiplier <= 0) throw new IllegalArgumentException();
return value / multiplier * multiplier;
}
public static int roundHalfUp(int value, int multiplier) {
if (multiplier <= 0) throw new IllegalArgumentException();
return (value + (value < 0 ? multiplier / -2 : multiplier / 2)) / multiplier * multiplier;
}
public static int roundUp(int value, int multiplier) {
if (multiplier <= 0) throw new IllegalArgumentException();
return (value + (value < 0 ? 1 - multiplier : multiplier - 1)) / multiplier * multiplier;
}
测试
Value Down Half Up
-4 -4 -4 -4
-3 0 -4 -4
-2 0 -4 -4
-1 0 0 -4
0 0 0 0
1 0 0 4
2 0 4 4
3 0 4 4
4 4 4 4
Value Down Half Up
-5 -5 -5 -5
-4 0 -5 -5
-3 0 -5 -5
-2 0 0 -5
-1 0 0 -5
0 0 0 0
1 0 0 5
2 0 0 5
3 0 5 5
4 0 5 5
5 5 5 5
答案 2 :(得分:2)
我能想到的最简单的方法是以下
public static int round(int num) {
return num - num % 45 + (num%45==0? 0 : 45);
}
int num1 = 67;
int num2 = 43;
int num3 = 90;
System.out.println(num1 - num1 % 45 + (num1%45==0? 0 : 45)); // 90
System.out.println(num2 - num2 % 45 + (num2%45==0? 0 : 45)); // 45
System.out.println(num3 - num3 % 45 + (num3%45==0? 0 : 45)); // 90