Ich habe eine Sicht in SQL Server, etwa so:
%Vor% Das Ergebnis ist 1.967741
(Anmerkung 6 Dezimalpunkte) - & gt; decimal (38,6)
Ich versuche dasselbe in einem Taschenrechner, aber das Ergebnis ist 1.967741935483871xxxx
Ich möchte erzwingen, dass SQL Server genauere Ergebnisse zurückgibt, wie zum Beispiel decimal(38,16)
Ich habe versucht, die offensichtlichen Dinge wie Casting, aber SQL Server verbessert nicht die Ausgabe Ich bekomme nur einige abschließende Nullen am Ende wie 1.9677410000
Gibt es eine Möglichkeit, SQL Server zu zwingen, das Ergebnis nicht zu kürzen oder genauer zu geben?
Wenn Sie etwas wie decimal(38,16)
wollen, dann müssen Sie die Eingaben und nicht die Ausgabe umwandeln, nachdem die Trunkierung bereits stattgefunden hat!
Gibt
zurück %Vor%Überprüfen Sie den Datentyp
%Vor%Gibt
zurück %Vor% Dies ist nur ein zusätzlicher Link als Follow-up zu den Kommentaren hinzuzufügen. Die Regeln für decimal
to decimal
conversion werden in BOL beschrieben . Dieser Link enthält den folgenden Ausdruck
* Die Ergebnisgenauigkeit und die Skalierung haben ein absolutes Maximum von 38. Wenn a Ergebnisgenauigkeit ist größer als 38, die entsprechende Skala wird reduziert auf verhindere den integralen Teil eines Ergebnisses von abgeschnitten werden.
aber lässt es nicht genau angegeben, wie eine solche Kürzung durchgeführt wird. Dies ist hier dokumentiert .
Dies ist ein kleiner Umweg, aber ich denke, es ist eine Anmerkung wert.
%Vor%Diese Abfrage:
%Vor%gibt zurück:
%Vor% Das Literal 6.71 wird als numeric
behandelt, das eine feste Genauigkeit hat. Da Sie Division durchführen, ändern Sie die Anzahl der Dezimalstellen, die Sie nicht verwenden möchten, wenn die Genauigkeit im Vordergrund steht. Wenn Sie Ihre Zahlen so behandeln möchten, als ob sie genau sind, müssen Sie den Nenner in Ihrer Abfrage mit einer größeren Genauigkeit in einen decimal
-Datentyp umwandeln. Dies sollte für Sie funktionieren:
Tags und Links sql-server tsql precision