在Java中总是四舍五入

时间:2018-12-23 17:33:55

标签: java

我没有找到任何答案。但是我想四舍五入到任意数量的十。像这样:

32 -> 40
25 -> 30
88 -> 90

但是使用下面的这段代码,我会四舍五入。我怎么总是四舍五入而不取整到十位?

Math.round(number / 10.0) * 10;

4 个答案:

答案 0 :(得分:4)

请参见我的https://clients4.google.com/glm/mmap/api关于如何处理负数的另一个问题。

要舍入到最接近的10的倍数,只需将整数除以总是四舍五入(向零)就可以将其除以10再乘以10。

roundDown = value / 10 * 10;

要四舍五入,请在四舍五入前加9。

roundUp = (value + 9) / 10 * 10;

要四舍五入,请在四舍五入前加5。

roundHalfUp = (value + 5) / 10 * 10;

测试

System.out.println("    Down  Up  Half-Up");
int[] arr = { 32, 25, 88, 50 };
for (int v : arr)
    System.out.printf("%2d %4d %4d %5d%n", v, v / 10 * 10, (v + 9) / 10 * 10, (v + 6) / 10 * 10);

输出

    Down  Up  Half-Up
32   30   40    30
25   20   30    30
88   80   90    90
50   50   50    50

答案 1 :(得分:1)

round可能会向上或向下取整,具体取决于余数。相反,您应该使用ceil

Math.ceil(number / 10.0) * 10

答案 2 :(得分:1)

在数学上,您需要一个值加上与其余10位的差。您可以使用%(模数)获得余数。喜欢,

int[] arr = { 32, 25, 88 };
for (int v : arr) {
    System.out.printf("%d -> %d%n", v, v + (10 - (v % 10)));
}

输出(按要求)

32 -> 40
25 -> 30
88 -> 90

您说 总是 向上取整。如果90应该保持90,则测试是否为零。喜欢,

for (int v : arr) {
    int r = v % 10;
    if (r != 0) {
        System.out.printf("%d -> %d%n", v, v + 10 - r);
    } else {
        System.out.printf("%d -> %d%n", v, v);
    }
}

答案 3 :(得分:1)

您可以通过以下方式仅使用Java整数算术来做到这一点:

x % 10 == 0 ? x : ((x / 10)  + 1) * 10

如此:

int x = 41;
int r = x % 10 == 0 ? x : ((x / 10)  + 1) * 10;
System.out.println(r);

将打印:

50