需要使用大十进制数舍入

2022-08-31 17:00:33

我想设置两个大十进制数和.如这个例子:ab

BigDecimal a = new BigDecimal("2.6E-1095");
        BigDecimal b = new BigDecimal("2.7E-1105");
        int i = 112, j=1;

        BigDecimal aa = a.setScale(i+j);
        BigDecimal bb = b.setScale(i+j);

当我运行时,我有这个例外:

java.lang.ArithmeticException: Rounding necessary
    at java.math.BigDecimal.divideAndRound(BigDecimal.java:1439)
    at java.math.BigDecimal.setScale(BigDecimal.java:2394)
    at java.math.BigDecimal.setScale(BigDecimal.java:2437)

为什么需要四舍五入?如果我不想四处走动,请问解决方案是什么?

谢谢


答案 1

您有两个大十进制数,这两个数字都需要超过 1000 个小数位。尝试将小数位数设置为只有 113 位小数意味着您将失去精度,因此需要四舍五入。

可以使用采用舍入模式的 setScale 方法来防止异常,但不能防止舍入。


答案 2

尝试使用 setScale 方法的 roudingMode。

像这样的事情:

BigDecimal aa = a.setScale(i+j, BigDecimal.ROUND_HALF_DOWN);