Sql Server Dezimal (30,10) verliert die letzten 2 Dezimalstellen

9

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?

    
WebMatrix 21.09.2009, 16:54
quelle

2 Antworten

17

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):

Vollständige Regeln hier

    
G Mastros 21.09.2009, 17:15
quelle
-1

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.

    
David Andres 21.09.2009 16:58
quelle

Tags und Links