Was ist float in Java?


102

Ich habe diesen Code geschrieben:

float b = 3.6;

und ich verstehe das:

Fehler: Ungelöstes Kompilierungsproblem: 
    Typinkongruenz: Konvertiert nicht von Double in Float

Warum? Was ist die Definition von float?



1
@Sneftel Das ist kein Duplikat dieser Frage. Diese Frage fragt, warum sie nicht kompiliert wird (zu der die Antwort lautet: "Sie müssen fdem Literal ein hinzufügen "), während die andere Frage fragt, warum Sie das hinzufügen müssen f. Obwohl sie verwandt sind, handelt es sich nicht um ein Duplikat.
Mark Rotteveel

Siehe meta.stackexchange.com/questions/217401/… . Die Antworten auf die verknüpfte Frage sind Antworten auf diese Frage.
Sneftel

Antworten:


180

Wenn Sie in Java eine Dezimalzahl als eingeben, wird diese als 3.6interpretiert double. doubleist ein IEEE 754-Gleitkomma mit 64-Bit-Genauigkeit, während floates sich um einen IEEE 754-Gleitkomma mit 32-Bit-Genauigkeit handelt. Da a floatweniger genau als a ist double, kann die Konvertierung nicht implizit durchgeführt werden.

Wenn Sie einen Float erstellen möchten, sollten Sie Ihre Nummer mit f(dh :) beenden 3.6f.

Weitere Erläuterungen finden Sie in der Definition der primitiven Datentypen des Java-Lernprogramms .


40

Mach es

float b= 3.6f;

Ein Gleitkomma-Literal ist vom Typ float, wenn es mit einem ASCII-Buchstaben F oder f versehen ist. Andernfalls ist der Typ doppelt und kann optional mit einem ASCII-Buchstaben D oder d versehen werden


Gibt es eine Möglichkeit zu überprüfen, ob eine Zeichenfolge nur einen Gleitkommawert hat?
MasterJoe

13

Die Sache ist, dass Dezimalzahlen standardmäßig doppelt sind. Und da double nicht in float passt, müssen Sie explizit angeben, dass Sie absichtlich einen float definieren. Also geh mit:

float b = 3.6f;

8

In JAVA sind Werte wie:

  1. 8.5
  2. 3.9
  3. (und so weiter..)

Wird als doppelt und nicht schwebend angenommen .

Sie können auch eine Besetzung durchführen, um das Problem zu lösen:

float b = (float) 3.5;;

Eine andere Lösung:

float b = 3.5f;;

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.