Was sind die Unterschiede zwischen numeric
, float
und decimal
Datentypen und die in welchen Situationen verwendet werden soll?
Welche Art von Finanztransaktion (z. B. für Gehaltsbereiche) wird bevorzugt und warum?
sql
sql-server
types
priyanka.sarkar
quelle
quelle
Antworten:
Ungefähre numerische Datentypen speichern nicht die genauen Werte, die für viele Zahlen angegeben wurden. Sie speichern eine extrem enge Annäherung an den Wert. ( Technet )
Vermeiden Sie die Verwendung von Float- oder Real-Spalten in den Suchbedingungen der WHERE-Klausel, insbesondere der Operatoren = und <> ( Technet ).
Daher ist die Genauigkeit der Dezimalzahl im Allgemeinen [10E38 ~ 38 Stellen], wenn Ihre Zahl hineinpasst, und der kleinere Speicherplatz (und möglicherweise die Geschwindigkeit) von Float ist nicht wichtig, und der Umgang mit abnormalen Verhaltensweisen und Problemen mit ungefähren numerischen Typen ist dies nicht akzeptabel, verwenden Sie Dezimal im Allgemeinen .
weitere nützliche Informationen
Hauptquelle : MCTS Self-Paced Training Kit (Prüfung 70-433): Microsoft® SQL Server® 2008-Datenbankentwicklung - Kapitel 3 - Tabellen, Datentypen und deklarative Datenintegrität Lektion 1 - Auswählen von Datentypen (Richtlinien) - Seite 93
quelle
use the float or real data types only if the precision provided by decimal is insufficient
- Ich dachte, real ist WENIGER genau als dezimal. Wie kommt es, dass Sie schreiben, um real zu verwenden, wenn die Dezimalzahl nicht ausreicht?decimal
dies in Ordnung. Das ist eine Genauigkeit von 20. Wenn Sie Werte zwischen beispielsweise 1e20 und 1e-20 speichern müssen,decimal
können Sie das nicht . Das sind 40 Stellen Genauigkeit. Sie können 1e20 und 1e-20 niemals im selbendecimal
Feld speichern . Stattdessen können Sie verwendenfloat
, das intern alles als Protokoll der Basis 2 speichert. Dies ermöglicht den vollen Genauigkeitsbereich in einem Feld mit dem Nachteil, dass nur die ersten ~ 8 Ziffern genau sind.float
..." - sagte wer? Ist das ein Zitat oder deine Meinung?Richtlinien von MSDN: Verwenden von Dezimal-, Gleitkomma- und Realdaten
quelle
Scale
Spalte angegeben.numeric
da es niemals präziser gespeichert wird, als Sie es gewünscht habenKeine vollständige Antwort, aber ein nützlicher Link:
"Ich berechne häufig anhand von Dezimalwerten. In einigen Fällen führt das Umsetzen von Dezimalwerten auf Float so schnell wie möglich vor Berechnungen zu einer besseren Genauigkeit."
http://sqlblog.com/blogs/alexander_kuznetsov/archive/2008/12/20/for-better-precision-cast-decimals-before-calculations.aspx
quelle
decimal
undfloat
sind unterschiedlich . Die Dezimalstelle schützt so weit wie möglich vor Unterlauf, indem die Genauigkeit oder Skalierung erhöht wird. Sobald Sie jedoch die Grenze für signifikante Dezimalstellen erreicht haben, sind die Unterläufe stumm (und die Genauigkeit geht verloren). Float hat einen größeren Skalierungsbereich und die Skalierungsbeschränkungen sind tatsächlich die Ursache für den Unterlauf. Somit kann der Schwimmer eine bessere Skalierung haben. Trotzdem ist es immer noch ein ungenauer Typ.Sie unterscheiden sich in der Priorität des Datentyps
Dezimal und Numerisch sind funktional gleich , es gibt jedoch immer noch Vorrang vor Datentypen , was in einigen Fällen von entscheidender Bedeutung sein kann.
Der resultierende Datentyp ist numerisch, da er Vorrang vor dem Datentyp hat .
Vollständige Liste der Datentypen nach Priorität:
Referenzlink
quelle
Dezimal hat eine feste Genauigkeit, während float eine variable Genauigkeit hat.
BEARBEITEN (die gesamte Frage konnte nicht gelesen werden): Float (53) (auch bekannt als real) ist eine Gleitkommazahl mit doppelter Genauigkeit (32 Bit) in SQL Server. Regular Float ist eine Gleitkommazahl mit einfacher Genauigkeit. Double ist eine gute Kombination aus Präzision und Einfachheit für viele Berechnungen. Sie können eine Zahl mit sehr hoher Genauigkeit mit Dezimalzahl erstellen - bis zu 136 Bit -, aber Sie müssen auch darauf achten, dass Sie Ihre Genauigkeit und Skalierung korrekt definieren, damit sie alle Ihre Zwischenberechnungen auf die erforderliche Anzahl von Stellen enthalten kann.
quelle
Float ist ein Datentyp mit ungefährer Anzahl. Dies bedeutet, dass nicht alle Werte im Datentypbereich genau dargestellt werden können.
Dezimal / Numerisch ist ein Datentyp mit fester Präzision. Dies bedeutet, dass alle Werte im Datentypbereich exakt und präzise dargestellt werden können. Sie können Dezimalstellen verwenden, um Geld zu sparen.
Das Konvertieren von Dezimal oder Numerisch in Float kann zu Genauigkeitsverlusten führen. Für die Datentypen Dezimal oder Numerisch betrachtet SQL Server jede bestimmte Kombination aus Genauigkeit und Skalierung als einen anderen Datentyp. DECIMAL (2,2) und DECIMAL (2,4) sind unterschiedliche Datentypen. Dies bedeutet, dass 11.22 und 11.2222 unterschiedliche Typen sind, obwohl dies bei float nicht der Fall ist. Für FLOAT (6) sind 11.22 und 11.2222 dieselben Datentypen.
Sie können auch den Gelddatentyp verwenden, um Geld zu sparen. Dies ist ein nativer Datentyp mit 4-stelliger Genauigkeit für Geld. Die meisten Experten bevorzugen diesen Datentyp, um Geld zu sparen.
Referenz 1 2 3
quelle
Der Fall für Dezimal
Was ist das zugrunde liegende Bedürfnis?
Es ergibt sich aus der Tatsache, dass Computer letztendlich intern Zahlen im Binärformat darstellen. Das führt zwangsläufig zu Rundungsfehlern.
Bedenken Sie:
Die obige Ellipse [...] bedeutet "unendlich". Wenn Sie es sich genau ansehen, gibt es ein sich unendlich wiederholendes Muster (= '0011').
Irgendwann muss der Computer diesen Wert also runden. Dies führt zu Akkumulationsfehlern, die sich aus der wiederholten Verwendung von Zahlen ergeben, die ungenau gespeichert sind.
Angenommen, Sie möchten finanzielle Beträge speichern (Zahlen, die möglicherweise einen Bruchteil ausmachen). Erstens können Sie offensichtlich keine ganzen Zahlen verwenden (ganze Zahlen haben keinen Bruchteil). Aus rein mathematischer Sicht wäre die natürliche Tendenz, a zu verwenden
float
. In einem Computer haben Floats jedoch den Teil einer Zahl, der nach einem Dezimalpunkt liegt - die "Mantisse" - begrenzt. Das führt zu Rundungsfehlern.Um dies zu überwinden, bieten Computer bestimmte Datentypen an, die den binären Rundungsfehler in Computern für Dezimalzahlen begrenzen. Dies ist der Datentyp, der unbedingt zur Darstellung von Finanzbeträgen verwendet werden sollte. Diese Datentypen tragen normalerweise den Namen
Decimal
. Dies ist beispielsweise in C # der Fall. OderDECIMAL
in den meisten Datenbanken.quelle
Obwohl die Frage nicht den MONEY-Datentyp enthielt, könnten einige Personen, die auf diesen Thread stoßen, versucht sein, den MONEY-Datentyp für Finanzberechnungen zu verwenden.
Seien Sie vorsichtig mit dem Datentyp MONEY, der nur eine begrenzte Genauigkeit aufweist.
Die Antworten auf diese Stackoverflow-Frage enthalten viele gute Informationen dazu:
Sollten Sie die Datentypen MONEY oder DECIMAL (x, y) in SQL Server auswählen?
quelle