Java BigDecimal:四舍五入到客户端首选数字和增量
我需要根据客户偏好对某些值进行舍入。客户端可以自定义位数和四舍五入值,如下所示Java BigDecimal:四舍五入到客户端首选数字和增量,java,bigdecimal,Java,Bigdecimal,我需要根据客户偏好对某些值进行舍入。客户端可以自定义位数和四舍五入值,如下所示 NumOfDigits | RoundOff | InputValue || ExpectedOutput 0.01 | 2 | 43.0 || 43.0 0.01 | 2 | 43.1 || 43.1 0.01 | 2 | 43.11 || 43.11 0.01 | 2
NumOfDigits | RoundOff | InputValue || ExpectedOutput
0.01 | 2 | 43.0 || 43.0
0.01 | 2 | 43.1 || 43.1
0.01 | 2 | 43.11 || 43.11
0.01 | 2 | 43.11234 || 43.11
0.1 | 1 | 43.0 || 43.0
0.1 | 1 | 43.1 || 43.1
0.1 | 1 | 43.12 || 43.1
0.1 | 1 | 43.1234 || 43.1
0.2 | 1 | 43.0 || 43.0
0.2 | 1 | 43.1 || 43.0
0.2 | 1 | 43.2 || 43.2
0.2 | 1 | 43.3 || 43.2
0.2 | 1 | 43.11 || 43.0
0.3 | 1 | 43.0 || 43.0
0.3 | 1 | 43.1 || 43.0
0.3 | 1 | 43.2 || 43.0
0.3 | 1 | 43.3 || 43.3
0.3 | 1 | 43.11 || 43.0
0.25 | 2 | 33.0 || 33.0
0.25 | 2 | 33.3 || 33.25
0.25 | 2 | 33.7 || 33.50
0.25 | 2 | 33.9 || 33.75
0.25 | 2 | 33.33 || 33.25
0.25 | 2 | 33.71 || 33.50
0.25 | 2 | 33.91 || 33.75
0.25 | 2 | 33.12345 || 33.25
我可以用下面的代码限制位数。然而,我无法根据上述逻辑找到一个四舍五入的解决方案
BigDecimal incrementedValue = BigDecimal.valueOf(inputValue).setScale(numOfDigits, ROUND_DOWN);
根据Wikipedia(),将数字x舍入为某个增量m的倍数需要以下过程:
四舍五入值z=四舍五入(x,m)=四舍五入(x/m)*m
在您的情况下,您希望始终向下取整。这是通过使用地板而不是圆形来实现的。翻译成Java后,您的程序将如下所示
// ex. input = 33.91, increment = 0.25 -> 33.75
public double round(double input, double increment) {
return Math.floor(input / increment) * increment;
}
谢谢@ashiwin153。例如,它适用于0.25,但现在适用于0.3。它应该适用于所有增量。失败的输入值是什么?是的,明天测试后我会的