2つのBigDecimal数a
とb
のスケールを設定したい。この例のように:
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メソッドを使用して、例外を防ぐことができますが、丸めはできません。
SetScaleメソッドのroudingModeを使用してみてください。
何かのようなもの:
BigDecimal aa = a.setScale(i+j, BigDecimal.ROUND_HALF_DOWN);
丸めが必要です。
BigDecimalのjavadoc では、BigDecimal
は(unscaledValue×10-規模)、ここでunscaledValue
は任意の長さの整数であり、scaleは32ビット整数です。
2.6 * 10-1095 正確に表すには少なくとも1096のスケールが必要です。 (任意の整数)* 10で正確に表すことはできません-113。したがって、roundingMode
を提供する必要があります。