2012-04-25 2 views
2

문제가있는 부분을 말해 줄 수있는 사람이 있습니까?BigDecimal의 오류

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 

답변

5

문제는 분할의 결과가 있다는 종료되지 않는 완전하다 같은 BigDecimal 표현할 수없는 소수점 수 (즉 하듯 무제한의 메모리가 필요함).

따라서 두 개의 (또는 세 개의) 매개 변수 버전 BigDecimal.divide을 사용하여 십진수의 수를 제한해야합니다.

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

(이 3 10 진수 결과를 반올림합니다.)

+0

내가 당신에게 베드로를 사랑 : D를 – Mehdi