在我的代码中进行一系列计算后,我的BigDecimal
值为0.01954
然后,我需要将此BigDecimal
乘以100
,并希望计算出的值为1.95
我不希望执行任何舍入或向下舍入,我只想要超过两位小数的任何值被截断
我尝试将比例设置为2,但后来我得到ArithmeticException
说舍入是必要的。如何在不指定舍入的情况下设置比例?
答案 0 :(得分:53)
使用RoundingMode.DOWN或RoundingMode.FLOOR。
BigDecimal newValue = myBigDecimal.setScale(2, RoundingMode.DOWN);
答案 1 :(得分:8)
使用包含RoundingMode的setScale覆盖:
value.setScale(2, RoundingMode.DOWN);
答案 2 :(得分:1)
当我使用一个BigDecimal设置另一个时,我面临一个截断的问题。源可以具有任何值,这些值可以具有不同的十进制值。
BigDecimal source = BigDecimal.valueOf(11.23); // could 11 11.2 11.234 11.20 etc
为了正确截断并缩放两位小数,我不得不使用源的字符串值而不是BigDecimal或double值。
new BigDecimal(source.toPlainString()).setScale(2, RoundingMode.FLOOR))
我用它作为货币,这总是导致值有2个小数位。