Co to jest float w Javie?

103

Napisałem ten kod:

float b = 3.6;

i otrzymuję to:

Błąd: nierozwiązany problem z kompilacją: 
    Niezgodność typów: nie można przekonwertować z podwójnego na zmiennoprzecinkowy

Czemu? Jaka jest definicja float?

t0mkaka
źródło
1
@Sneftel To nie jest duplikat tego pytania. To pytanie dotyczy tego, dlaczego się nie kompiluje (na co odpowiedź brzmi „musisz dodać a fdo literału”), podczas gdy inne pytanie dotyczy tego, dlaczego musisz dodać f. Chociaż są powiązane, nie jest to duplikat.
Mark Rotteveel
Zobacz meta.stackexchange.com/questions/217401/… . Odpowiedzi na powiązane pytanie są odpowiedziami na to pytanie.
Sneftel

Odpowiedzi:

180

W Javie, gdy wpiszesz liczbę dziesiętną as 3.6, zostanie zinterpretowana jako double. doublejest 64-bitową precyzją zmiennoprzecinkową IEEE 754, a float32-bitową precyzją zmiennoprzecinkową IEEE 754. Ponieważ a floatjest mniej dokładny niż a double, konwersja nie może zostać wykonana niejawnie.

Jeśli chcesz utworzyć zmiennoprzecinkowy, powinieneś zakończyć swój numer znakiem f(np .:) 3.6f.

Więcej wyjaśnień można znaleźć w definicji pierwotnych typów danych w samouczku Java .

Nicolas
źródło
41

Zrób to

float b= 3.6f;

Literał zmiennoprzecinkowy jest typu float, jeśli jest zakończony literą ASCII F lub f; w przeciwnym razie jego typ jest podwójny i opcjonalnie może być zakończony literą ASCII D lub d

Jigar Joshi
źródło
Czy istnieje sposób sprawdzenia, czy ciąg ma tylko wartość zmiennoprzecinkową?
MasterJoe
13

Chodzi o to, że liczby dziesiętne domyślnie podwajają się. A ponieważ double nie pasuje do float, musisz wyraźnie powiedzieć, że celowo definiujesz float. Więc idź z:

float b = 3.6f;
Jan Zyka
źródło
8

W JAVA wartości takie jak:

  1. 8.5
  2. 3.9
  3. (i tak dalej..)

Zakłada się, że jest podwójne i nie jest zmienne .

Możesz także wykonać rzut, aby rozwiązać problem:

float b = (float) 3.5;

Inne rozwiązanie:

float b = 3.5f;

Carlos Sá
źródło