Ich weiß nicht, warum f oder F nach Float-Werten in Java oder anderen Sprachen steht. zum Beispiel,
float fVariable = 12.3f;
Gibt es andere Funktionen als die Angabe, dass dies ein Float-Wert ist?
Ich weiß nicht, warum f oder F nach Float-Werten in Java oder anderen Sprachen steht. zum Beispiel,
float fVariable = 12.3f;
Gibt es andere Funktionen als die Angabe, dass dies ein Float-Wert ist?
Antworten:
Standardmäßig 12.3
ist es double
wörtlich. Um den Compiler anzuweisen, es float
explizit zu behandeln -> verwendet es f
oderF
Da es nur so viele Möglichkeiten gibt, eine Zahl in Ihrem Programm darzustellen, mussten die Designer von Java jedes Formular auswählen und dem häufigsten Anwendungsfall zuordnen. Für die standardmäßig ausgewählten Formulare ist das Suffix , das den genauen Typ angibt, optional.
Wenn Sie also 12
Ihr Programm eingeben, ist dies ein int- Literal im Gegensatz zu 12L
einem langen . Und wenn Sie tippen 12.3
, ist das ein doppeltes Literal im Gegensatz zu 12.3F
einem Float .
Wo ist das also relevant? Hauptsächlich beim Umgang mit Downcasts oder beim Eingrenzen von Conversions. Immer wenn Sie einen Long auf einen Int oder einen Double auf einen Float herabstufen, besteht die Möglichkeit eines Datenverlusts. Der Compiler zwingt Sie also anzugeben, dass Sie die Verengungskonvertierung wirklich durchführen möchten, indem er einen Kompilierungsfehler für Folgendes signalisiert:
float f = 12.3;
Da 12.3 ein Double darstellt, müssen Sie es explizit in einen Float umwandeln (im Grunde genommen bei der Verengungskonvertierung abmelden). Andernfalls können Sie mithilfe des richtigen Suffix angeben, dass die Zahl tatsächlich ein Float ist.
float f = 12.3f;
Zusammenfassend lässt sich sagen, dass die Angabe eines Suffixes für Longs und Floats ein Kompromiss ist, den die Sprachdesigner gewählt haben, um die Notwendigkeit, genau anzugeben, was eine Zahl ist, mit der Flexibilität, Zahlen von einem Speichertyp in einen anderen zu konvertieren, auszugleichen.
d
die beste double
Darstellung einer numerischen Größe ist x
, sie einem Wert float f=(float)d
am nächsten kommt float
, der innerhalb eines Teils pro Billion von liegt x
, obwohl eine Typumwandlung erforderlich ist. Wenn dagegen f
die beste float
Darstellung eines numerischen Werts vorliegt x
, double d=f
ist keine Typumwandlung erforderlich, obwohl diese häufig nicht annähernd der besten double
Darstellung entspricht x
und um Hunderte von Größenordnungen abweicht . Ich finde es ironisch, dass float f=(float)(1.0/10.0)
eine Besetzung nötig ist, aber double d=1.0f/10.0f
nicht.
float
und double
kann nur ungefähre Darstellungswerte für einige Werte bereitstellen. zB 12,3 oder 0,1
Der Unterschied besteht darin, dass der Schwimmer nicht so genau ist (da er weniger präzise ist, weil er kleiner ist).
z.B
System.out.println("0.1f == 0.1 is " + (0.1f == 0.1));
System.out.println("0.1f is actually " + new BigDecimal(0.1f));
System.out.println("0.1 is actually " + new BigDecimal(0.1));
druckt
0.1f == 0.1 is false
0.1f is actually 0.100000001490116119384765625
0.1 is actually 0.1000000000000000055511151231257827021181583404541015625
So 0.1
ist die nächste Darstellung in double
und 0.1f
ist die nächste Darstellung infloat
float fVariable = 12,3; ist gut. Wenn Sie jedoch zu diesem Zeitpunkt nur den Float-Wert (ohne Bezeichner) in einem Ausdruck verwenden, müssen Sie dem Compiler mitteilen, dass der Wert float ist. Daher verwenden wir das Suffix "f" nach dem Wert. Beispiel
float fl = 13f / 5f;
hier sind 13 und 5 Gleitkommawerte.
Während der Kompilierung werden alle Gleitkommazahlen (Zahlen mit Dezimalpunkt) standardmäßig verdoppelt.
Wenn Sie also nicht möchten, dass sich Ihre Zahl verdoppelt und nur als float, möchten Sie dem Compiler dies explizit mitteilen, indem Sie am Ende der Literalkonstante ein f oder F hinzufügen .
In Java gibt es viele verschiedene grundlegende Variablentypen. Um es allgemein zu halten, verfügt es über einige Standardfunktionen. Wenn wir eine Eingabe 16.02 geben, wird diese automatisch als doppelte Eingabe verwendet. Wenn Sie es also als float angeben möchten, erwähnen wir das 'f' nach der Zahl oder wir können einfach verwenden:
float f = (float) 16.02;
oder
float f = 16.02f;
Ebenso müssen wir 16 l erwähnen, wenn die Nummer als langer Typ gespeichert werden soll, sonst wird automatisch der Standardtyp ausgewählt, dh der Int-Typ.
Float ist ein 32-Bit-IEEE 754-Gleitkomma mit einfacher Genauigkeit und Double ist ein 64-Bit-IEEE 754-Gleitkomma mit doppelter Genauigkeit. Wenn Sie einen Wert mit Dezimalstellen verwenden und diesen nicht als 0,23f (speziell float) angeben, identifiziert Java ihn als Double.
Bei Dezimalwerten ist der doppelte Datentyp im Allgemeinen die Standardauswahl von Java. Überprüfen Sie dies
Wenn Sie f nicht verwenden, wird es als double interpretiert, was in Java die Standardeinstellung ist. Sie können es auch so schreiben ##
float f=(float) 32.5956;
float f=32.5956f;