Search code examples
javaformattingbigdecimal

Get all decimal places in a number after division


I am currently using the BigDecimal and it is giving me more decimals but not nearly enough for what I am trying to do. I need to be able to get all the way to the 10^6 digit. This is my current code

BigDecimal num = new BigDecimal(103993/33102.0);
    pw.println(num.toString());

and it outputs 3.14159265301190249175533608649857342243194580078125

where the number actually has a lot more decimals: http://www.wolframalpha.com/input/?i=103993%2F33102


Solution

  • You are loosing the precision when evaluating this:

    103993/33102.0
    

    as a double division. Actually, the following:

    BigDecimal num = new BigDecimal(103993/33102.0);
    

    is equivlent to:

    double d = 103993/33102.0;
    BigDecimal num = new BigDecimal(d);
    

    instead, use:

    int scale = 100;
    BigDecimal num1 = new BigDecimal(103993);
    BigDecimal num2 = new BigDecimal(33102);
    System.out.println(num1.divide(num2, scale, RoundingMode.HALF_UP).toString());
    

    OUTPUT:

    3.1415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737