2013-02-12 15 views
5

To jest mój kod:możliwość utraty błędu precyzji w 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); 

    } 
} 

Dostaję taki błąd:

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

Dlaczego to wszystko?

Odpowiedz

13

Literały zmiennoprzecinkowe są domyślnie typu double. Przypisanie podwójnej wartości float spowoduje błąd precyzji. Można albo zmienić type o c do double lub dołączania f na koniec to, aby uczynić go float tak:

float c = 30.123f; 
+0

+1 W tej chwili jesteś bardzo aktywny na SO :) –

+0

@ Eng.Fouad. :) Po prostu staram się utrzymać mój umysł zajęty, aby nie zardzewiało. ;) –

+0

Powodem podwójnego domyślnego typu literalnego jest to, że podwójne jest bardzo normalnym typem zmiennoprzecinkowym w Javie. Używałbym tylko float, gdybym miał do czynienia z bardzo dużym zbiorem liczb z ograniczoną precyzją i dobrze zachowanym przetwarzaniem. Zmiana typu c na podwójne byłoby lepszym rozwiązaniem. –

2

Jeżeli określono wartość pływaka bez f na końcu jest ona traktowana jako double który jest domyślnie.

double d = 30.123; 

Literał float powinien być dołączany na końcu wartości float.

float c = 30.123f; 
Powiązane problemy