Verwenden von decimal-, float- und real-Daten

Der decimal-Datentyp kann maximal 38 Ziffern speichern, wobei alle Ziffern rechts vom Dezimaltrennzeichen liegen können. Der decimal-Datentyp speichert eine genaue Darstellung der Zahl; es gibt keinen Näherungswert des gespeicherten Werts.

Die folgenden beiden Attribute definieren decimal-Spalten, -Variablen und -Parameter:

  • p

    Legt die Genauigkeit oder die Anzahl der Ziffern fest, die das Objekt aufnehmen kann.

  • s

    Legt die Dezimalstellen bzw. die Anzahl der Ziffern rechts vom Dezimaltrennzeichen fest.

    Für p und s muss folgende Regel beachtet werden: 0 <= s <= p <= 38.

Standardmäßig beträgt die maximale Genauigkeit bei den Datentypen numeric und decimal 38. In Transact-SQL ist numeric äquivalent mit dem decimal-Datentyp.

Verwenden Sie den decimal-Datentyp zum Speichern von Zahlen mit Dezimalstellen, wenn die Datenwerte genau wie angegeben gespeichert werden müssen.

Informationen zu den Auswirkungen mathematischer Operationen auf die Genauigkeit und die Dezimalstellen des Ergebnisses finden Sie unter Genauigkeit, Dezimalstellen und Länge (Transact-SQL).

Verwenden von float- und real-Daten

Die Datentypen float und real sind ungefähre Datentypen. Das Verhalten von float und real folgt der IEEE 754-Spezifikation für ungefähre numerische Datentypen.

Ungefähre numerische Datentypen speichern nicht die für viele Zahlen angegebenen genauen Werte, sondern eine äußerst genaue Näherung des Werts. Bei zahlreichen Anwendungen ist der geringfügige Unterschied zwischen dem angegebenen Wert und der gespeicherten Näherung nicht erkennbar. Gelegentlich kann sich der Unterschied jedoch bemerkbar machen. Aufgrund der Tatsache, dass die Datentypen float und real nur Näherungswerte darstellen, sollten Sie diese Datentypen nicht verwenden, wenn exakte numerische Werte benötigt werden, wie z. B. in Finanzanwendungen, in Operationen, bei denen Rundungen erforderlich sind, oder in Überprüfungen der Gleichheit. Verwenden Sie stattdessen die Datentypen decimal, money oder smallmoney.

Das Verwenden von float- oder real-Spalten in Suchbedingungen der WHERE-Klausel sollte vermieden werden; dies gilt insbesondere für die Operatoren = und <>. Die beste Lösung besteht darin, float- und real-Spalten auf >- oder <-Vergleiche zu beschränken.

Die IEEE 754-Spezifikation stellt vier Rundungsmodi zur Verfügung: auf den nächsten Wert runden, Aufrunden, Abrunden und auf Null runden. Microsoft SQL Server verwendet den Aufrundungsmodus. Alle Rundungsverfahren sind für die jeweils angegebene Genauigkeit exakt, es können sich jedoch leicht abweichende Werte für Gleitkommazahlen ergeben. Da die binäre Darstellung einer Gleitkommazahl auf unterschiedlichen zulässigen Rundungsverfahren basieren kann, ist es unmöglich, den Wert einer Gleitkommazahl zuverlässig zu bestimmen.