2016-07-30 8 views
0

This post haben den folgenden Code:SQL Server: Warum ist Float genauer als Dezimal

DECLARE @A DECIMAL(3, 0), @B DECIMAL(18, 0), @F FLOAT 

SET @A = 3 
SET @B = 3 
SET @F = 3 

SELECT 1/@A * 3.0, 1/@B * 3.0, 1/@F * 3.0 
SELECT 1/@A * 3 , 1/@B * 3 , 1/@F * 3 

float Mit dem Ausdruck ergibt 1. Mit Dezimal, wird der Ausdruck mit einem gewissen Sammlung von 9s nach dem Komma . Warum liefert Float in diesem Fall die genauere Antwort? Ich dachte, dass Dezimal ist genauer/genau per Difference between numeric, float and decimal in SQL Server und

Antwort

3

Die Dezimalwerte, die Sie deklariert haben, sind feste Breite, und es gibt keine Punkte nach der Dezimalstelle. Dies beeinflusst die Berechnungen.

SQL Server hat eine ziemlich komplexe Formel für die Berechnung der Genauigkeit arithmetischer Ausdrücke, die Dezimalzahlen enthalten. Die Details sind in der documentation. Sie müssen auch berücksichtigen, dass numerische Konstanten im Dezimalformat statt numerisch sind.

Am Ende müssen Sie auch wieder in ein Dezimalformat mit der gewünschten Genauigkeit konvertieren. In diesem Fall könnten Sie feststellen, dass float und decimal gleichwertig sind.

+0

Danke. Das [Post] (http://www.sqlservercentral.com/Forums/Topic522397-360-1.aspx#bm522459) wurde mir über die Verwendung von "Dezimal" (anstelle von "float") für Finanzdaten pausiert. Aus Ihrer referenzierten Dokumentation habe ich [diesen Artikel] (https://msdn.microsoft.com/en-us/library/ms190309.aspx) gefunden, die float als höhere Priorität anzeigt. Daher wird das calc in der select-Anweisung in ein float umgewandelt. Wenn ich zurück in "dezimal" umwandle, wird der entsprechende Wert wie angegeben zurückgegeben. – James