Wir benutzen double
.
*keuchen*
Warum?
Weil es eine beliebige 15-stellige Zahl ohne Einschränkungen für den Dezimalpunkt darstellen kann . Alles für nur 8 Bytes!
So kann es darstellen:
0.123456789012345
123456789012345.0
... und alles dazwischen.
Dies ist nützlich, da es sich um globale Währungen handelt und double
die verschiedenen Dezimalstellen gespeichert werden können, auf die wir wahrscheinlich stoßen werden.
Ein einzelnes double
Feld kann 999.999.999.999.999 in japanischen Yen, 9.999.999.999.999,99 in US-Dollar und sogar 9.999.999.99999999 in Bitcoins darstellen
Wenn Sie versuchen, dasselbe mit zu tun decimal
, benötigen Sie, decimal(30, 15)
was 14 Bytes kostet.
Vorsichtsmaßnahmen
Natürlich ist die Verwendung double
nicht ohne Einschränkungen.
Allerdings ist es nicht Genauigkeitsverlust , wie einige darauf hinweisen neigen. Auch wenn double
es für das Basis-10-System intern möglicherweise nicht genau ist , können wir es genau machen, indem wir den Wert, den wir aus der Datenbank ziehen, auf seine signifikanten Dezimalstellen runden . Bei Bedarf ist das so. (zB Wenn es ausgegeben werden soll und eine Darstellung der Basis 10 erforderlich ist.)
Die Einschränkungen sind, dass wir jedes Mal, wenn wir damit rechnen, das Ergebnis normalisieren müssen (indem wir es auf seine signifikanten Dezimalstellen runden), bevor:
- Vergleiche durchführen.
- Schreiben Sie es zurück in die Datenbank.
Eine andere Art von Einschränkung besteht darin, dass im Gegensatz dazu, decimal(m, d)
wo die Datenbank verhindert, dass Programme eine Zahl mit mehr als m
Ziffern einfügen , keine derartigen Überprüfungen vorhanden sind double
. Ein Programm könnte einen vom Benutzer eingegebenen Wert von 20 Stellen einfügen und wird dann stillschweigend als ungenauer Betrag aufgezeichnet.
deimal(10,2)
ist, was ich benutze ... Sie können die Werte abhängig von der erwarteten Größe anpassen