Java: Doppel gegen Float
In einem anderen Bruce Eckel übung, den code, den ich geschrieben habe, braucht eine Methode und ändert den Wert in eine andere Klasse. Hier ist mein code:
class Big {
float b;
}
public class PassObject {
static void f(Letter y) {
y.c = 'z';
} //end f()
static void g(Big z) {
z.b = 2.2;
}
public static void main(String[] args ) {
Big t = new Big();
t.b = 5.6;
System.out.println("1: t.b : " + t.b);
g(x);
System.out.println("2: t.b: " + t.b);
} //end main
}//end class
Es wirft eine Fehlermeldung "Possible loss of precision."
PassObject.java:13: possible loss of precision
found: double
required : float z.b = 2.2
passobject.java:20: possible loss of precision
found : double
required : float t.b = 5.6
Nicht double
s float
s?
vielen Dank im Voraus
InformationsquelleAutor der Frage phill | 2009-04-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, aber Sie müssen angeben, dass Sie schwimmt, andernfalls werden Sie behandelt als verdoppelt:
'F' am Ende der Reihe macht es zu einem float anstelle von double.
Java nicht automatisch, engen ein double in einen float.
InformationsquelleAutor der Antwort mipadi
Nein, schwebt automatisch Verallgemeinerung zu verdoppelt, aber verdoppelt, kann niemals schwimmt, ohne explizite Umwandlung, weil doubles haben die größere Reichweite.
float-Bereich ist
1.40129846432481707e-45
zu3.40282346638528860e+38
doppelte Reichweite ist
4.94065645841246544e-324d
zu1.79769313486231570e+308d
InformationsquelleAutor der Antwort Powerlord
Standardmäßig Java behandelt, eine Dezimalzahl (z.B. "
4.3
") alsdouble
es sei denn, Sie anders festlegen, einefloat
indem ein f hinter der Zahl (z.B. "4.3f
").Du hast das gleiche problem auf beiden Linien. Erstens, die decimal-literal interpretiert werden als eine Verdoppelung der compiler. Dann versucht zuzuordnen
b
die den Typfloat
. Seit eindouble
64 bit und einefloat
ist nur 32 bit (siehe Java ' s primitive Dokumentation), Java gibt Sie eine Fehlermeldung, die angibt, dass diefloat
passt nicht innerhalb derdouble
. Die Lösung ist, ein f, um Ihre decimal-Literale.Wenn Sie versuchen, das Gegenteil zu tun (d.h. weisen eine
float
zu einemdouble
), das wäre okay, da können Sie passen einefloat
's 32 bits innerhalb einesdouble
's 64.InformationsquelleAutor der Antwort mtlynch
Nicht verwenden schweben. Es ist fast nie ein guter Grund, es zu benutzen und wurde nicht für mehr als ein Jahrzehnt. Verwenden Sie einfach doppelklicken.
InformationsquelleAutor der Antwort Peter Lawrey
Nicht. Jeder Wert oder eine variable hat genau einen Typ (double, float, int, long, etc...). Die Java Language Specification Staaten genau das, was passiert, wenn Sie versuchen, einen Wert zuweisen eines Typs an eine variable eines anderen Typs. Im Allgemeinen Zuweisungen der "kleinere" Wert auf eine "größere" Art sind erlaubt und erfolgt implizit, aber Aufgaben, bei denen Informationen verloren gehen könnten, da die target-Typ ist zu "klein" zu halten, werden alle Werte von der Herkunft Art werden vom compiler nicht zulässig, auch wenn der konkrete Wert passt in die Ziel-Typ.
Dass ist der Grund, warum der compiler beschwert sich, dass die Zuweisung eines double-Wert (was die wörtliche implizit ist), um eine float-variable könnten Informationen verloren gehen, und Sie zu besänftigen, entweder macht der Wert einen float -, oder casting ausdrücklich.
Einem Gebiet, das führt oft zu Verwirrungen, die ist-Berechnungen, da diese implizit "verbreitert" int " aus technischen Gründen. Also, wenn man multipliziert zwei shorts und versuchen, weisen Sie das Ergebnis einer kurzen, der compiler wird sich beschweren, weil das Ergebnis der Berechnung ein int.
InformationsquelleAutor der Antwort Michael Borgwardt
float Reichweite ist geringer als das doppelte, so ein Schwimmer kann leicht dargestellt in Doppel -, aber das Gegenteil ist nicht möglich, weil, lassen Sie uns sagen, wir nehmen einen Wert, der außerhalb der float-Strecke dann während der convention werden wir verlieren, die genauen Daten
InformationsquelleAutor der Antwort sumanta