在我的代码中进行了一系列计算之后,我有了一个BigDecimal
with 值0.01954
然后我需要将其乘以BigDecimal
,100
我希望计算的值是1.95
我不希望进行任何向上或向下舍入,我只想截断任何超过小数点后两位的值
我尝试将比例设置为 2,但后来我得到一个ArithmeticException
说法,四舍五入是必要的。如何在不指定舍入的情况下设置比例?
在我的代码中进行了一系列计算之后,我有了一个BigDecimal
with 值0.01954
然后我需要将其乘以BigDecimal
,100
我希望计算的值是1.95
我不希望进行任何向上或向下舍入,我只想截断任何超过小数点后两位的值
我尝试将比例设置为 2,但后来我得到一个ArithmeticException
说法,四舍五入是必要的。如何在不指定舍入的情况下设置比例?
使用RoundingMode.DOWN或RoundingMode.FLOOR。
BigDecimal newValue = myBigDecimal.setScale(2, RoundingMode.DOWN);
使用包含 RoundingMode 的 setScale 覆盖:
value.setScale(2, RoundingMode.DOWN);
当我使用一个 BigDecimal 设置另一个时,我遇到了截断问题。源可以具有任何具有不同十进制值的值。
BigDecimal source = BigDecimal.valueOf(11.23); // could 11 11.2 11.234 11.20 etc
为了正确截断和缩放两位小数,我必须使用源的字符串值而不是 BigDecimal 或双精度值。
new BigDecimal(source.toPlainString()).setScale(2, RoundingMode.FLOOR))
我将其用于货币,这始终会产生带 2 个小数位的值。