Search code examples
javabigdecimalrounding

Unexpected BigDecimal result. 1 divided by 3 results in 1. Unsure why


Possible Duplicate:
Addition for BigDecimal

I feel like I'm missing something obvious, but cannot figure out what it is. I'm trying to use BigDecimal to get the decimal portion of a division between two numbers. A very simple case, 1.00 divided by 3.00 should be 0.(3) repeating. However, I keep getting a result of 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);

My result is 1.00 and I can't figure out why?


Solution

  • The result of num.divide is ignored. You need to set that back into a variable

        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);
    

    This prints 0.33