title: Weird Java behavior: How come adding doubles with EXACTLY two decimal places result to a double with MORE THAN two decimal places?
body: <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>