448 Stimmen

Unterschied zwischen numerisch, float und dezimal in SQL Server

Was sind die Unterschiede zwischen numeric , float y decimal Datentypen und welche sollten in welchen Situationen verwendet werden?

Welche Art von Finanztransaktion (z. B. für den Bereich Gehalt) wird bevorzugt und warum?

8voto

Varus Septimus Punkte 1292

Das Argument für Decimal

Was ist das eigentliche Bedürfnis?

Sie ergibt sich aus der Tatsache, dass Computer Zahlen intern im Binärformat darstellen. Das führt unweigerlich zu Rundungsfehlern.

Bedenken Sie dies:

0.1 (decimal, or "base 10") = .00011001100110011... (binary, or "base 2")

Der obige Auslassungspunkt [...] bedeutet "unendlich". Wenn man es genau betrachtet, 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 ungenau gespeicherten Zahlen ergeben.

Nehmen wir an, Sie möchten finanzielle Beträge (Zahlen, die einen Bruchteil haben können) speichern. Zunächst einmal können Sie natürlich keine ganzen Zahlen verwenden (ganze Zahlen haben keine Nachkommastellen). Aus rein mathematischer Sicht wäre die natürliche Tendenz, eine float . In einem Computer ist jedoch der Teil einer Zahl, der sich nach dem Dezimalpunkt befindet - die "Mantisse" - begrenzt. Das führt zu Rundungsfehlern.

Um dies zu vermeiden, bieten Computer spezielle Datentypen an, die den binären Rundungsfehler in Computern für Dezimalzahlen begrenzen. Dies sind die Datentypen, die unbedingt zur Darstellung von Finanzbeträgen verwendet werden sollten. Diese Datentypen haben in der Regel den Namen Decimal . Das ist zum Beispiel in C# der Fall. Oder, DECIMAL in den meisten Datenbanken.

7voto

Brian Reiter Punkte 1329

Dezimal hat eine feste Genauigkeit, während Float eine variable Genauigkeit hat.

EDIT (ich habe nicht die ganze Frage gelesen): Float(53) (auch bekannt als Real) ist eine doppelt genaue (64-Bit) Fließkommazahl in SQL Server. Regular Float ist eine einfach genaue (32-Bit) Fließkommazahl. Double ist eine gute Kombination aus Präzision und Einfachheit für viele Berechnungen. Mit Dezimal können Sie eine sehr genaue Zahl erstellen - bis zu 136 Bit -, aber Sie müssen auch darauf achten, dass Sie Ihre Genauigkeit und Skalierung richtig definieren, damit alle Zwischenberechnungen mit der erforderlichen Anzahl von Stellen durchgeführt werden können.

3voto

Simon Tewsi Punkte 15527

Obwohl die Frage nicht den Datentyp MONEY enthielt, könnten einige Leute, die auf diesen Thread stoßen, versucht sein, den Datentyp MONEY für finanzielle Berechnungen zu verwenden.

Seien Sie vorsichtig mit dem Datentyp MONEY, er ist von begrenzter Genauigkeit.

In den Antworten auf diese Stackoverflow-Frage finden Sie eine Menge guter Informationen darüber:

Sollten Sie die Datentypen MONEY oder DECIMAL(x,y) in SQL Server wählen?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X