2013-02-12 14 views
5

Questo è il mio codice:possibile perdita di errore di precisione in java

class test{ 

    public static void main(String arg[]){ 

     int a=10, b=20; 
     float c = 30.123; 
     int e = (int)c; 
     System.out.println(e); 

    } 
} 

sto ottenendo questo errore:

test.java:6: error: possible loss of precision 
     float c = 30.123; 
       ^
required: float 
found: double 
1 error 

Perché tutto questo?

risposta

13

I letterali a virgola mobile sono di tipo double predefinito. E assegnare un doppio valore a un tipo float comporterà un errore di precisione. È possibile cambiare il type di c-double, o aggiungere un f alla fine di esso per renderlo float in questo modo:

float c = 30.123f; 
+0

+1 Sei molto attivo su SO in questi giorni :) –

+0

@ Eng.Fouad. :) Sto solo cercando di mantenere la mente occupata, in modo che non si arrugginisca. ;) –

+0

Il motivo per il doppio del tipo letterale predefinito è che il doppio è molto il normale tipo di virgola mobile in Java. Userei float solo se avessi a che fare con un numero molto grande di numeri con una precisione limitata e un'elaborazione ben educata. Cambiare il tipo di c per raddoppiare sarebbe una soluzione migliore. –

2

Se si specifica il valore float senza f alla fine si è trattato come double che è di default.

double d = 30.123; 

Per il letterale float è necessario aggiungere f alla fine del valore float.

float c = 30.123f; 
Problemi correlati