Weird Java behavior: How come adding doubles with EXACTLY two decimal places result to a double with MORE THAN two decimal places?
<p>If I have an array of doubles that each have EXACTLY two decimal places, add them up altogether via a loop, and print out the total, what comes out is a number with MORE THAN two decimal places. Which is weird, because theoretically, adding two numbers that each have 2 and only 2 decimal places will NEVER produce a number that has a non-zero digit beyond the hundredths place.</p>

<p>Try executing this code:</p>

<pre><code>double[] d = new double[2000];
for (int i = 0; i &lt; d.length; i++) {
    d[i] = 9.99;
}

double total = 0,00;
for (int i = 0; i &lt; d.length; i++) {
    total += d[i];
    if (("" + total).matches("[0-9]+\\.[0-9]{3,}")) { // if there are 3 or more decimal places in the total
        System.out.println("total: " + total + ", " + i); // print the total and the iteration when it occured
    }
}
</code></pre>

<p>In my computer, this prints out:</p>

<pre><code>total: 59.940000000000005, 5
</code></pre>

<p>If I round off the total to two decimal places then I'd get the same number as I would if I manually added 9.99 six times on a calculator. But how come this is happening and where are the extra decimal places coming from? Am I doing something wrong or (I doubt this is likely) is this a Java bug?</p>
