Wenn 2 Dezimalzahlen (30,10) in Sql Server 05 geteilt werden, scheinen 2 letzte Dezimalen verloren zu gehen (nicht einmal abgerundet, einfach abgeschnitten).
Zum Beispiel:
%Vor%Ergebnis: 2.28196731 00
Aber wenn zwei Zahlen, die geteilt werden, in float umgewandelt werden, scheint das zu funktionieren:
%Vor%Ergebnis: 2.28196731 81
Warum macht Sql das? Und was ist der richtige Weg, Dezimalzahlen zu teilen, ohne die Genauigkeit in Sql zu verlieren?
Die maximal zulässige Genauigkeit in SQL Server ist 38. Sie verwenden Dezimal (30,10). Der Maximalwert beträgt 99.999.999.999.999.999.999,99999999999. Wenn Sie diese Zahl durch 0,000000001 teilen, erhalten Sie eine noch größere Zahl, so dass der resultierende Datentyp in der Lage sein muss, diesen Wert zu berücksichtigen. Dadurch verlieren Sie etwas an Genauigkeit.
Ändern Sie Ihre ursprünglichen Datentypen in Dezimal (20,10), und dieses Problem tritt nicht auf.
Vollständige Regeln zu Datentypen (und wie sie von mathematischen Operationen betroffen sind):
Kurz gesagt, verwenden Sie Gießen, um Ihre Ergebnisse zu garantieren. Wenn Sie @x und @y Literalwerten zuweisen, übernehmen sie wahrscheinlich die Genauigkeit dieser Literale. Dies hilft zu erklären, warum die Division durch diese Werte hinter Ihren Erwartungen zurückbleibt.
Tags und Links sql sql-server tsql