我在使用BigDecimal的小数位数和RoundingMode四舍五入数字时遇到问题。
这是我的代码:
BigDecimal taxAmount = new BigDecimal("0.8445");
taxAmount = taxAmountPrecision.setScale(2, RoundingMode.HALF_UP);
如果我输入0.845,则四舍五入,但如果存在0.8445,则taxAmount为0.84。
它应该是0.8445-> 0.845-> 0.85。
这就是该舍入方法的确切预期行为。
舍入模式向“最近的邻居”舍入,除非两个邻居都是等距的,在这种情况下将舍入。
0.8445到2位小数的最近邻是0.84。HALF_UP
如果值为0.845或更大(值之间的一半),则将四舍五入为0.85;如果小于或等于该值,则将四舍五入为0.844。0.8445小于0.845,因此四舍五入。
没有中间的舍入步骤可以传播5
您想要的内容。如果要进行这种舍入,则必须编写一个舍入循环以稳定降低精度。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句