Originariamente inviato da Druzya
so che per evitare la perdita di precisione tra int e long si utilizza la L. c'e' un meccanismo simile per i double?
Se metti un valore "letterale" decimale è già double, in pratica 12.34 è lo stesso di 12.34d (mentre invece 12.34f lo rende float).

Ma non è quello il problema! Il problema è dovuto a come sono rappresentati internamente i numeri in virgola mobile.

Ecco un altro esempio in cui il risultato non è quello voluto:
codice:
public class Prova
{
    public static void main (String[] args)
    {
        double a = 2.54;
        double b = 2.5;

        double dif = a - b;

        if (dif == 0.04)
            System.out.println ("uguale");
        else
            System.out.println ("diverso");
    }
}
Ebbene: stampa "diverso".