Java BigDecimal - 向下舍入到用户提供的倍数
Java BigDecimal - rounding down to the user-provided multiple
我有一个业务需求,其中输入值应向下舍入为用户提供的倍数。这是示例:
Case | input | multiples | output
1 | 43.0 | 0.1 | 43.0
2 | 43.1 | 0.1 | 43.1
3 | 43.2 | 0.1 | 43.2
4 | 43.0 | 0.2 | 43.0
5 | 43.1 | 0.2 | 43.0
6 | 43.2 | 0.2 | 43.2
如果multiples
为0.1,则输出应以0.1为增量,例如43.1、43.2等。
如果 multiples
为 0.2,则输出应以 0.2 为增量,例如 43.0、43.2、43.4 等。
在 Java 中使用 BigDecimal
执行此操作的最佳方法是什么?不过,使用 BigDecimal.setScale(1, ROUND_DOWN)
我能够限制小数点的数量。
一个简化的解决方案可以是(伪代码)
if (multiple == 0.1) then {
output = input
} else {
if ((int) input * 10 % 2 == 1) {
output -= 0.1
} else {
output = input
}
}
减去0.1后需要注意四舍五入
编辑:可能的解决方案
double input = 43.0;
for (int i = 0; i <= 10; i++) {
double output = input;
if ((int) (input * 10) % 2 == 1) {
output = ((double) (int) (input * 10) - 1) / 10;
}
System.out.printf("input: %f output: %f%n", input, output);
input += 0.1;
}
结果输出
input: 43.000000 output: 43.000000
input: 43.100000 output: 43.000000
input: 43.200000 output: 43.200000
input: 43.300000 output: 43.200000
input: 43.400000 output: 43.400000
input: 43.500000 output: 43.400000
input: 43.600000 output: 43.600000
input: 43.700000 output: 43.600000
input: 43.800000 output: 43.800000
input: 43.900000 output: 43.800000
input: 44.000000 output: 44.000000
我有一个业务需求,其中输入值应向下舍入为用户提供的倍数。这是示例:
Case | input | multiples | output
1 | 43.0 | 0.1 | 43.0
2 | 43.1 | 0.1 | 43.1
3 | 43.2 | 0.1 | 43.2
4 | 43.0 | 0.2 | 43.0
5 | 43.1 | 0.2 | 43.0
6 | 43.2 | 0.2 | 43.2
如果multiples
为0.1,则输出应以0.1为增量,例如43.1、43.2等。
如果 multiples
为 0.2,则输出应以 0.2 为增量,例如 43.0、43.2、43.4 等。
在 Java 中使用 BigDecimal
执行此操作的最佳方法是什么?不过,使用 BigDecimal.setScale(1, ROUND_DOWN)
我能够限制小数点的数量。
一个简化的解决方案可以是(伪代码)
if (multiple == 0.1) then {
output = input
} else {
if ((int) input * 10 % 2 == 1) {
output -= 0.1
} else {
output = input
}
}
减去0.1后需要注意四舍五入
编辑:可能的解决方案
double input = 43.0;
for (int i = 0; i <= 10; i++) {
double output = input;
if ((int) (input * 10) % 2 == 1) {
output = ((double) (int) (input * 10) - 1) / 10;
}
System.out.printf("input: %f output: %f%n", input, output);
input += 0.1;
}
结果输出
input: 43.000000 output: 43.000000
input: 43.100000 output: 43.000000
input: 43.200000 output: 43.200000
input: 43.300000 output: 43.200000
input: 43.400000 output: 43.400000
input: 43.500000 output: 43.400000
input: 43.600000 output: 43.600000
input: 43.700000 output: 43.600000
input: 43.800000 output: 43.800000
input: 43.900000 output: 43.800000
input: 44.000000 output: 44.000000