Search code examples
javabigdecimal

How can I divide properly using BigDecimal


My code sample:

import java.math.*; 

public class x
{
  public static void main(String[] args)
  {
    BigDecimal a = new BigDecimal("1");
    BigDecimal b = new BigDecimal("3");
    BigDecimal c = a.divide(b, BigDecimal.ROUND_HALF_UP);
    System.out.println(a+"/"+b+" = "+c);
  }
}

The result is: 1/3 = 0

What am I doing wrong?


Solution

  • You haven't specified a scale for the result. Please try this

    2019 Edit: Updated answer for JDK 13. Cause hopefully you've migrated off of JDK 1.5 by now.

    import java.math.BigDecimal;
    import java.math.RoundingMode;
    
    public class Main {
    
        public static void main(String[] args) {
            BigDecimal a = new BigDecimal("1");
            BigDecimal b = new BigDecimal("3");
            BigDecimal c = a.divide(b, 2, RoundingMode.HALF_UP);
            System.out.println(a + "/" + b + " = " + c);
        }
    
    }
    

    Please read JDK 13 documentation.

    Old answer for JDK 1.5 :

    import java.math.*; 
    
        public class x
        {
          public static void main(String[] args)
          {
            BigDecimal a = new BigDecimal("1");
            BigDecimal b = new BigDecimal("3");
            BigDecimal c = a.divide(b,2, BigDecimal.ROUND_HALF_UP);
            System.out.println(a+"/"+b+" = "+c);
          }
        }
    

    this will give the result as 0.33. Please read the API