Search code examples
javadouble

Double subtraction precision issue


My coworker did this experiment:

public class DoubleDemo {

      public static void main(String[] args) {
           double a = 1.435;
           double b = 1.43;
           double c = a - b;
           System.out.println(c);
      }
 }

For this first-grade operation I expected this output:

0.005

But unexpectedly the output was:

0.0050000000000001155

Why does double fails in such a simple operation? And if double is not the datatype for this work, what should I use?


Solution

  • double is internally stored as a fraction in binary -- like 1/4 + 1/8 + 1/16 + ...

    The value 0.005 -- or the value 1.435 -- cannot be stored as an exact fraction in binary, so double cannot store the exact value 0.005, and the subtracted value isn't quite exact.

    If you care about precise decimal arithmetic, use BigDecimal.

    You may also find this article useful reading.