Cos'è il float in Java?


102

Ho scritto questo codice:

float b = 3.6;

e ottengo questo:

Errore: problema di compilazione non risolto: 
    Tipo non corrispondente: impossibile convertire da double a float

Perché? Qual è la definizione di float?



1
@Sneftel Questo non è un duplicato di questa domanda. Questa domanda chiede perché non si compila (a cui la risposta è "devi aggiungere un fal letterale"), mentre l'altra domanda chiede perché devi aggiungere il f. Sebbene siano correlati, non è un duplicato.
Mark Rotteveel

Vedi meta.stackexchange.com/questions/217401/… . Le risposte alla domanda collegata sono risposte a questa domanda.
Sneftel

Risposte:


180

In Java, quando si digita un numero decimale come 3.6, viene interpretato come un double. doubleè una virgola mobile IEEE 754 di precisione a 64 bit, mentre floatè una virgola mobile IEEE 754 di precisione a 32 bit. Poiché a floatè meno preciso di a double, la conversione non può essere eseguita implicitamente.

Se vuoi creare un float, dovresti terminare il tuo numero con f(es:) 3.6f.

Per ulteriori spiegazioni, vedere la definizione dei tipi di dati primitivi del tutorial Java .


40

Fallo

float b= 3.6f;

Un valore letterale a virgola mobile è di tipo float se è suffisso con una lettera ASCII F o f; altrimenti il ​​suo tipo è doppio e può opzionalmente essere suffisso con una lettera ASCII D o d


C'è un modo per verificare se una stringa ha solo un valore float?
MasterJoe

13

Il fatto è che i numeri decimali sono il doppio per impostazione predefinita. E poiché double non si adatta al float, devi dire esplicitamente che definisci intenzionalmente un float. Quindi vai con:

float b = 3.6f;

8

In JAVA, valori come:

  1. 8.5
  2. 3.9
  3. (e così via..)

Si assume come double e non float .

Puoi anche eseguire un cast per risolvere il problema:

float b = (float) 3.5;

Un'altra soluzione:

float b = 3.5f;

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.