1. ホーム
  2. java

[解決済み] BigDecimalの数値は四捨五入が必要

2022-03-01 12:38:54

質問

2つのBigDecimalの数値のスケールを設定したい 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)

なぜ四捨五入が必要なのか、四捨五入したくない場合の解決策は?

ありがとうございます。

解決方法は?

2つのBigDecimalの数値があり、どちらも小数点以下が1000桁以上必要です。小数点以下113桁までしか表示できないように設定しようとすると、精度が落ちるので丸める必要があります。

RoundingModeを受け取るsetScaleメソッドを使用すると、例外を防ぐことはできますが、丸めはできません。