我没有找到任何答案。但是我想四舍五入到任意数量的十。像这样:
32 -> 40
25 -> 30
88 -> 90
但是使用下面的这段代码,我会四舍五入。我怎么总是四舍五入而不取整到十位?
Math.round(number / 10.0) * 10;
答案 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