【发布时间】:2018-12-23 17:33:55
【问题描述】:
我还没有找到任何答案。但我想四舍五入到任何数字中的十个。像这样:
32 -> 40
25 -> 30
88 -> 90
但是使用下面的这段代码,我得到了四舍五入。我怎样才能总是四舍五入而不是最接近的十位?
Math.round(number / 10.0) * 10;
【问题讨论】:
标签: java
我还没有找到任何答案。但我想四舍五入到任何数字中的十个。像这样:
32 -> 40
25 -> 30
88 -> 90
但是使用下面的这段代码,我得到了四舍五入。我怎样才能总是四舍五入而不是最接近的十位?
Math.round(number / 10.0) * 10;
【问题讨论】:
标签: java
请参阅我的previous answer 了解如何处理负数的另一个问题。
要向下舍入到最接近的 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
【讨论】:
round 可以向上或向下取整,具体取决于余数。相反,您应该使用ceil:
Math.ceil(number / 10.0) * 10
【讨论】:
你可以通过只使用 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
【讨论】:
从数学上讲,您需要一个值加上十个余数的差。你可以用%(模数)得到余数。喜欢,
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
你说总是四舍五入。如果九十应该保持九十,那么您测试余数为零。喜欢,
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);
}
}
【讨论】: