BigDecimal错误舍入

萨加拉(Piotr Sagalara)

我在使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章