Search code examples
javabigdecimal

BigDecimal divide with a large number of decimal places


My question is very simple

In BigDecimal I want to do this:

public static void main (String [] args) {
    System.out.println(new BigDecimal(1).divide(new BigDecimal(3));
}

I want the result to be this : 0.333333333333333333333333333333333....... and not 0.3334 or 0.33.


Solution

  • All BigDecimal operations allow to set precision (number of digits after decimal point) and rounding mode.

    System.out.println(
        new BigDecimal(1).divide(new BigDecimal(3), 10, RoundingMode.HALF_UP));
    

    will output 0.3333333333. You can create a MathContext object to encapsulate this information. This is helpful since you typically need to do several operations with the same precision and rounding settings.

    MathContext mc = new MathContext(10, RoundingMode.HALF_UP);
    System.out.println(new BigDecimal(1).divide(new BigDecimal(3), mc));
    System.out.println(new BigDecimal(1).divide(new BigDecimal(9), mc));