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?
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.