你如何向下舍入到最近的20in Java的倍数?

时间:2014-11-27 16:43:08

标签: java math rounding

请记住,我只想将DOWN舍入到最接近的20的倍数,从不向上。

  • 22 - > 20
  • 45 - > 40
  • 69.5 - > 60
  • 60 - > 60

非常感谢!

5 个答案:

答案 0 :(得分:8)

public static Integer round20(Integer b){
        return b - (b%20);
    }

答案 1 :(得分:7)

一种解决方案是从初始值中减去模20的结果(这是除以20的余数)。像,

double[] in = { 22, 45, 69.5, 60 };
for (double d : in) {
    int v = (int) d;
    v -= v % 20;
    System.out.printf("%.1f --> %d%n", d, v);
}

输出

22.0 --> 20
45.0 --> 40
69.5 --> 60
60.0 --> 60

答案 2 :(得分:4)

你可以除以20,舍入(Math.floor)然后乘以20。

答案 3 :(得分:1)

您正在寻找模运算。来自Wikipedia

  

在计算中,模运算找到除法的余数   一个数字与另一个数字(有时称为模数)。

所以你可以写:

int unrounded = 66;
int rounded = unrounded - (unrounded % 20);

作为一种方法:

public static int moduloFloor(int toRound, int modulo) {
    return toRound - (toRound % modulo);
}

答案 4 :(得分:0)

您想知道提供的号码有多少20个。假设x是您的输入,请尝试:

Math.floor(x / 20) * 20