Search code examples
javabigdecimal

Remove trailing numbers


Why I get trailing so many numbers when I run below code?

BigDecimal lat =  new BigDecimal(0.0077);

System.out.println(lat);

output >> 0.00770000000000000024702462297909733024425804615020751953125

I want to print exactly what I entered. How can I do this?


Solution

  • Most finite decimal fractions cannot be exactly represented by floating-point, so that is the approximation you get when you create the floating-point literal 0.0077.

    To avoid the problem, use the constructor BigDecimal(String val) instead:

    BigDecimal lat = new BigDecimal("0.0077");
    

    As @TimB points out, if you already have a double value, you can also use:

    BigDecimal lat = BigDecimal.valueOf(doubleVal);
    

    Also, here is the mandatory reference to What Every Computer Scientist Should Know About Floating-Point Arithmetic.