Ich habe die folgenden Berechnungen in Excel, die ich in einer gespeicherten Prozedur verwenden möchten.SQL-Fließkomma-Genauigkeit begrenzt auf 6 Ziffern
Excel
CellA: 45/448.2 = 0.100401606425703
CellB: 1-CellA = 0.899598393574297
CellC: 1-CellB = 0.100401606425703
CellD: CellC * 448.2 = 45.000000000000000
In SQL mache ich folgendes:
declare @a decimal(18,15) = 45/448.2
declare @b decimal(18,15) = [email protected]
declare @c decimal(18,15) = [email protected]
declare @d decimal(18,15) = @c * 448.2
ich auch die Berechnung in einer Zeile versucht haben, laufen
declare @e decimal(18,15) = (1-(1-(45/448.2)))*448.2
, wenn ich die Werte SQL zurückgeben gibt mir folgendes:
@a: 0.100401000000000
@b: 0.899599000000000
@c: 0.100401000000000
@d: 44.999728200000000
@e: 44.999728200000000
Ich habe versucht, die Genauigkeit der Dezimalstellen in SQL anzupassen, aber ich nichts macht einen Unterschied, es gibt nur die ersten 6 Stellen der Dezimalstelle zurück.
Führt Excel beim Ausführen der Formel eine Optimierung durch?
Irgendwelche Ideen?
Versuchen, sagen wir, SELECT 45/CAST (448,2 AS DECIMAL (18,1)) '. [Die Links hier] (http://stackoverflow.com/a/5385417/73226) sagen Ihnen die Regeln für den resultierenden Datentyp der Division. –
@MartinSmith das gibt mir eine vollständigere Dezimalstelle für @a, obwohl meine Antwort 45.000000000000085 ist, können Sie erklären, warum? – ScampDoodle
Es wird in den zwei Links von der vorherigen Antwort erklärt, die ich zu faul war, um oben zu reproduzieren. "e1/e2 ergibt p = p1 - s1 + s2 + max (6, s1 + p2 + 1), s = max (6, s1 + p2 + 1)". Wenn 'p'' '38' wäre, dann' s' ist abgeschnitten bei '6' –