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?
doubleis internally stored as a fraction in binary — like1/4 + 1/8 + 1/16 + ...The value
0.005— or the value1.435— cannot be stored as an exact fraction in binary, sodoublecannot store the exact value0.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.