Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java BigDecimal:四舍五入到客户端首选数字和增量_Java_Bigdecimal - Fatal编程技术网

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。它应该适用于所有增量。失败的输入值是什么?是的,明天测试后我会的