BigDecimal错误的舍入

Pio*_*ara 3 java rounding bigdecimal

我有一个使用BigDecimal的比例和RoundingMode舍入数字的问题.

这是我的一段代码:

BigDecimal taxAmount = new BigDecimal("0.8445");
taxAmount = taxAmountPrecision.setScale(2, RoundingMode.HALF_UP);
Run Code Online (Sandbox Code Playgroud)

如果我把0.845放得很好,但如果有0.8445,则taxAmount为0.84.

它应该是0.8445 - > 0.845 - > 0.85.

res*_*man 8

这是该舍入方法的确切预期行为.

舍入模式向"最近邻居"舍入,除非两个邻居等距,在这种情况下向上舍入.

最近的0.8445到2位小数是0.84.HALF_UP如果值为0.845或更大(值之间的中间值),则将舍入为0.85,如果小于该值,则将舍入为0.844.0.8445小于0.845,因此它向下舍入.

没有中间的舍入步骤来传播5你想要的东西.如果你想要那种舍入,你将不得不写一个循环来循环以稳定地减少精度.