41

在我的代码中进行了一系列计算之后,我有了一个BigDecimalwith 值0.01954

然后我需要将其乘以BigDecimal100我希望计算的值是1.95

我不希望进行任何向上或向下舍入,我只想截断任何超过小数点后两位的值

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

4

3 回答 3

70

使用RoundingMode.DOWNRoundingMode.FLOOR

BigDecimal newValue = myBigDecimal.setScale(2, RoundingMode.DOWN);
于 2014-06-17T20:41:44.533 回答
13

使用包含 RoundingMode 的 setScale 覆盖:

value.setScale(2, RoundingMode.DOWN);
于 2014-06-17T20:41:07.767 回答
3

当我使用一个 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 个小数位的值。

  • 11 -> 11.00
  • 11.2 -> 11.20
  • 11.234 -> 11.23
  • 11.238 -> 11.23
  • 11.20 -> 11.20
于 2020-07-24T04:50:55.037 回答