Rundung Problem mit SQL-Server und REAL-Datentyp

Ich sehe etwas seltsames Verhalten beim Runden in SQL Server 2008. Die folgenden code:

DECLARE @Value REAL
SELECT @Value = .35
SELECT ROUND(@Value, 1)

Ich würde erwarten, dass der Wert zu sein, .4, jedoch gibt es .3. Ich muss davon ausgehen, ist dies, weil der Wert gespeichert ist eigentlich weniger als .35, etwas wie .34999999999999. Ist dies der Fall, oder mache ich etwas falsch? Gibt es eine Möglichkeit, dies zu gewährleisten, verhält sich wie erwartet, zumindest von den sichtbaren Wert?

  • Was bekommen Sie, wenn @Value ist der Typ DECIMAL(10,2)? Denken Sie daran, dass REAL ist der Ungefähre Daten-Typ, was bedeutet, es kann ja speichern .35 als .34999999999999 oder etwas ähnliches.
  • Mit einem DECIMAL(10,2) gibt das erwartete Ergebnis. Leider, meine Datenbank ist schon mit ECHTEN dafür. Vielleicht muss ich schauen bei der Umwandlung.
  • Ja, ich würde vorschlagen, Sie zu konvertieren. REAL und FLOAT sind nicht die Daten geben, die Sie verwenden sollten, wenn Sie erwarten, logisch (z.B. mehr annähernd als das, was die Wissenschaft lehrt, Sie) Rundung.
Schreibe einen Kommentar