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?
java
floating-point
ipkiss
quelle
quelle
Antworten:
Standardmäßig
12.3
ist esdouble
wörtlich. Um den Compiler anzuweisen, esfloat
explizit zu behandeln -> verwendet esf
oderF
quelle
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 zu12L
einem langen . Und wenn Sie tippen12.3
, ist das ein doppeltes Literal im Gegensatz zu12.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.
quelle
d
die bestedouble
Darstellung einer numerischen Größe istx
, sie einem Wertfloat f=(float)d
am nächsten kommtfloat
, der innerhalb eines Teils pro Billion von liegtx
, obwohl eine Typumwandlung erforderlich ist. Wenn dagegenf
die bestefloat
Darstellung eines numerischen Werts vorliegtx
,double d=f
ist keine Typumwandlung erforderlich, obwohl diese häufig nicht annähernd der bestendouble
Darstellung entsprichtx
und um Hunderte von Größenordnungen abweicht . Ich finde es ironisch, dassfloat f=(float)(1.0/10.0)
eine Besetzung nötig ist, aberdouble d=1.0f/10.0f
nicht.float
unddouble
kann nur ungefähre Darstellungswerte für einige Werte bereitstellen. zB 12,3 oder 0,1Der 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 indouble
und0.1f
ist die nächste Darstellung infloat
quelle
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.
quelle
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 .
quelle
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:
oder
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.
quelle
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
quelle
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;
quelle