2013-07-25 10 views
5

Wenn ich auftreteWas ist der Unterschied zwischen 'Float a = 3f' und 'Float a = 3.0' in Java?

97346822*3f, result is 2.9204048E8, 

jedoch

97346822*3.0 gives me 2.92040466E8. 

Bitte erläutern.

+1

Die anderen haben Ihre Frage zu den unterschiedlichen Ergebnissen beantwortet. Aber ich sollte beachten, dass die _declaration_, die Sie in den Titel setzen, "Float a = 3.0" (oder "float a = 3.0"), vom Compiler zurückgewiesen wird, weil 3.0 als "double" behandelt wird und es nicht gefällt Sie zwingen es in eine Variable mit geringerer Genauigkeit (ohne eine explizite Typumwandlung). – ajb

+2

Warum unterscheiden sich die Fragen in Titel und Körper? –

+0

Sie müssen wissen, dass 'float' nicht das gleiche wie' Float' ist, was nicht dasselbe wie 'double' ist. Sobald Sie feststellen, dass der Typ wirklich zählt, ist es keine Überraschung, dass die Antworten unterschiedlich sind. –

Antwort

7

Die Anzahl 3.0 ist die literal representation eines double Wert (es ist äquivalent zu 3.0d), wohingegen ein Wert 3.0ffloat ist. Die unterschiedlichen Genauigkeiten erklären, warum Sie unterschiedliche Ergebnisse erhalten - ein double wird mit 64-Bit gespeichert, ein float verwendet 32-Bit.

+0

3.0 ist sowohl in float als auch in double genau darstellbar, so dass es für diesen speziellen Fall keinen Unterschied gibt. –

+2

@Patricia: Korrekt, aber das Ergebnis von 97346822 * 3 ist in einem Float nicht genau darstellbar. –

3
97346822*3.0 

wird als double behandelt.

Basierend auf oracle tutorial

Die doppelte Datentyp ist ein doppelter Genauigkeit 64-Bit-IEEE 754 Gleitpunkt. Der Wertebereich liegt außerhalb des Rahmens dieser Erörterung, wird jedoch im Abschnitt "Gleitkommatypen, -formate und -werte" der Java-Sprachspezifikation angegeben. Für Dezimalwerte ist dieser Datentyp im Allgemeinen die Standardauswahl.

97346822*3f 

wird als float behandelt werden.

0

Dies sind Erkenntnisse im Zusammenhang mit this question und meine Antwort auf diese.

Während 3.0 und 3f beide denselben Wert haben, wenn sie in Gleitkommawerte eingegeben werden, wird der tatsächliche Wert als Arbeitsspeicher für die Gleitkommaoperation verwendet. Die internen Werte, die Teil der Multiplikation sind, passen nicht in den Gleitkommawert selbst und werden modifiziert, was zu einer Differenz von 14,0 zwischen den erhaltenen Ergebnissen führt.

Verwandte Themen