Big float-zahlen seltsame Ergebnisse
In java bin ich mit float zu speichern, die zahlen. Ich entschied mich für die float-format, wie ich arbeite sowohl mit Ganzzahlen und double-zahlen, wobei die zahlen unterschiedlich sind, kann es große Integer-zahlen oder big double zahlen mit unterschiedlicher Anzahl von Dezimalstellen. Aber wenn ich stecken Sie diese zahlen in die Datenbank, die falsche Nummer gespeichert ist. Zum Beispiel:
float value = 0f;
value = 67522665;
System.out.println(value);
Gedruckt: 6.7522664E7 und es wird in der Datenbank gespeichert wie 67522664 nicht als 67522665
- Bitte Lesen Sie docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html ", Welche Jeden Computer Scientist should Know About Floating-Point Arithmetic", bevor Sie etwas ernstes mit floating-point-zahlen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Floating-point-zahlen haben begrenzte Auflösung — etwa 7 signifikante Ziffern. Sie werden sehen, Fehler Runden. Sie können eine
double
für mehr Auflösung oder zur exakten Arithmetik, verwendenBigDecimal
.Empfohlene Lektüre: Was Jeder Computer Scientist Should Know About Floating-Point Arithmetic
BigDecimal
Berechnung ist viel langsamer als bei anderen primitiven Datentyp.Doubles und floats haben Speicher Probleme.
Wie ist floating point gespeichert?
"Die float-und double-Typen sind in Erster Linie für wissenschaftliche und technische
Berechnungen. Sie führen binary floating-point-Arithmetik, die sorgfältig
entwickelt, um die Ausstattung präzise Annäherungen schnell über eine Breite Palette von Größen.
Das tun Sie jedoch nicht, genaue Ergebnisse und sollte nicht verwendet werden, wenn
genaue Ergebnisse erforderlich sind."
Nicht verwenden schweben. Verwenden BigDecimal statt. Und meine Erfahrung mit Datenbanken, Sie kehren Ihre ANZAHL typisierte Elemente als BigDecimal. Als ich Sie geholt mit JDBC, Sie sind BigDecimal-Objekte.
Soweit ich es habe, das ist über die gap Größe (oder ULP, Einheiten in der letzten Stelle) in die binäre Darstellung, das ist der Abstand zwischen zusammenhängenden f-Punkt-Werte.
Dieser Wert ist gleich:
wird e die tatsächliche exponent einer Reihe, und p die Präzision.
Beachten Sie, dass der Abstand (oder Spalt) erhöht sich der Wert der dargestellten Zahl erhöht:
In IEEE-754, die Präzision ist p 24, so Sie sehen können, wenn e >= 23 wir können zu sprechen beginnen von ganzzahligen Abstand in der floating-point-Welt.
Werden die Dinge schlimmer, als die zahlen immer größer werden. Zum Beispiel:
Ref:Der Abstand der Binary Floating-Point-Zahlen