doble que muestra un número muy largo

Tengo un cálculo simple que usa dobles pero obtengo un resultado inesperado y no puedo entender por qué.

import java.util.Scanner;
public class VersatileSnitSoft {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Scanner myScanner = new Scanner(System.in);
        double amount;
        System.out.print("What’s the price of a CD-ROM? ");
        amount = myScanner.nextDouble();
        amount = amount + 25.00;
        System.out.print("We will bill $");
        System.out.print(amount); 
        System.out.println(" to your credit card.");

    }

}

Si entro en 2.99 el resultado que obtengo es ..

We will bill $27.990000000000002 to your credit card.

Respuestas a la pregunta(4)

Su respuesta a la pregunta