如何向上舍入到指定数字的最接近倍数?

时间:2016-06-30 07:20:19

标签: java algorithm numeric

我已经查看了很多关于舍入到最接近的数字的倍数的问题,但是我无法理解他们的方法以便将它们用于四舍五入或者使用其他语言的语言特定方法。

如果上述内容没有多大意义,可以进行更详细的解释:

示例输入:

int num1 = 67;
int num2 = 43;

预期结果:

>>round(num1) = 90
>>round(num2) = 45

3 个答案:

答案 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);
}

Tested

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