2013-01-07 1 views
2

가능한 중복 :
Addition for BigDecimal예기치 않은 BigDecimal 결과입니다. 1 1. 확실 3 개 결과로 나눈 이유

나는 분명 뭔가 빠진 것 같은 느낌이 있지만, 그것이 무엇인지 알아낼 수 없습니다. BigDecimal을 사용하여 두 숫자 사이의 소수 부분을 가져 오려고합니다. 아주 간단한 경우, 1.00을 3.00으로 나눈 값은 0이어야합니다. (3) 반복. 그러나 나는 1.00의 결과를 얻는다.

BigDecimal num = new BigDecimal(1.00).setScale(2); 
BigDecimal divisor = new BigDecimal(3.00).setScale(2); 

num.divide(divisor, BigDecimal.ROUND_HALF_UP); 

System.out.print(num); 

결과가 1.00이고 이유를 파악할 수 없습니까?

답변

14

num.divide의 결과는 무시됩니다. 당신은 변수로이 다시 설정해야

BigDecimal num = new BigDecimal(1.00).setScale(2); 
    BigDecimal divisor = new BigDecimal(3.00).setScale(2); 

    BigDecimal result = num.divide(divisor, BigDecimal.ROUND_HALF_UP); 

    System.out.print(result); 

num는 결과를 반환을 변경하지 않습니다

+1

+1 BigDecimal (그리고 BigInteger가 사용하는)은 변경할 수 없으므로이 작업을 수행해야합니다. –

+0

아, 고마워. 문서에서 첫 번째 단어 임에도 불구하고 나는 그것을 완전히 놓쳤습니다. –

2

num.divide0.33를 인쇄합니다.

시도 :

num = num.divide(divisor, BigDecimal.ROUND_HALF_UP) 
3

BigDecimal를 불변이다. 결과를 변수에 지정해야합니다.