2016-07-22 52 views
1

So als Teil einer Abfrage, die ich ausführen, brauche ich absolute Genauigkeit (oder so nah wie möglich mit Computern) für das Ergebnis.SQL Server gibt ein anderes Ergebnis an einen physischen Rechner mit Dezimalzahlen zurück

Wenn ich diese Gleichung in SQL Server-Plug und führen Sie es:

BEGIN 
    PRINT cast (0.99986333333333333333333333333333333333 * 9999.99 as decimal (38, 30)); 
END; 

ich das Ergebnis:

9998.623334700000000000000000000000 

Jedoch, wenn ich diese Zahlen in meinen physischen Rechner steck ich das Ergebnis zu erhalten:

9998.623335 

Was ich wissen muss ist, welche ist richtig und warum?

Die Antwort von SQL Server ist die, die Google Calculator erstellt, und ein anderer Online-Rechner, der für extreme Genauigkeit beworben wird.

Kann mir jemand zeigen/mir beweisen welches ich verwenden soll?

Prost

Joe

+0

Ich nehme an, dass Ihr Rechner wahrscheinlich auf 6 Dezimalstellen rundet? – thomas

Antwort

2

Ich glaube, Sie Ihre eigene Frage beantwortet haben mit der Feststellung, dass zwei andere Quellen SQL Server auf diese sichern.

Wenn Sie darüber hinaus jeden Operanden geworfen, so dass Sie bekommen genau (nicht floating point) Mathematik, erhalten Sie die gleiche Antwort:

BEGIN 
    PRINT CAST(CAST(0.99986333333333333333333333333333333333 AS decimal(38,30)) * CAST(9999.99 AS decimal(38,30)) as decimal (38, 30)); 
END; 

Also würde ich den SQL Server-Antwort vertrauen.

+1

Ja. Sobald Sie an so viele Orte mit Fließkomma-Mathematik in SQL Server gehen, sind alle Wetten deaktiviert. Wenn Sie genaue Berechnungen benötigen, stellen Sie sicher, dass alles immer numerisch oder dezimal ist. – thomas

+1

Danke für Ihre Hilfe, hat mich verrückt gemacht. – Joe