如何截断BigDecimal而不进行舍入

时间:2014-06-17 20:36:51

标签: java rounding bigdecimal arithmeticexception

在我的代码中进行一系列计算后,我的BigDecimal值为0.01954

然后,我需要将此BigDecimal乘以100,并希望计算出的值为1.95

我不希望执行任何舍入或向下舍入,我只想要超过两位小数的任何值被截断

我尝试将比例设置为2,但后来我得到ArithmeticException说舍入是必要的。如何在不指定舍入的情况下设置比例?

3 个答案:

答案 0 :(得分:53)

使用RoundingMode.DOWNRoundingMode.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个小数位。

  • 11-> 11.00
  • 11.2-> 11.20
  • 11.234-> 11.23
  • 11.238-> 11.28
  • 11.20-> 11.20