2

どこに問題があるのか​​教えてください。

double interval;
         BigDecimal diff = BigDecimal.valueOf(17);
         int n=39;
         BigDecimal N = BigDecimal.valueOf(n);
         interval = diff.divide(N).doubleValue();//line26

         System.out.println(interval);

このエラーがあります

Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
    at java.math.BigDecimal.divide(BigDecimal.java:1603)
    at newlogoot.class.main(class.java:26)
Java Result: 1
4

1 に答える 1

5

問題は、除算の結果が非終了の 10 進数であり、そのままでは完全に表現できないことBigDecimalです (これには無制限の量のメモリが必要になるため)。

したがって、 の 2 つ (または 3 つ) パラメーター バージョンを使用して、10 進数の桁数を制限する必要がありますBigDecimal.divide

     interval = diff.divide(N, 3, RoundingMode.HALF_DOWN).doubleValue();//line26

(これにより、結果が小数点以下 3 桁に丸められます。)

于 2012-04-25T15:50:13.920 に答える