SQL Server-Rundungsfehler, unterschiedliche Werte werden angegeben
Ich habe eine gespeicherte Prozedur, die viele Berechnungen durchführt und die Ergebnisse in mehreren temporären Tabellen speichert. Schließlich wird die Summe berechnet und auf zwei Dezimalstellen gerundet und in einer temporären Tabelle gespeichert und diese ausgewählt.
Alle temporären Zwischen- und Abschlusstabellen haben den Datentyp float für die betreffende Spalte.
ursprüngliches Szenario:
Declare @Intermediate table
{
--several other columns
Labor float
--several other columns
};
---Lots of calculation ---xx-----
Declare @Final table
{
--several other columns
LaborTotal float
--several other columns
};
INSERT INTO @Final SELECT ROUND(ISNULL((SELECT SUM([Labor]) FROM @Intermediate ),0),2) AS LaborTotal;
SELECT * FROM @Final;
Result: 7585.22 --> when rounded //Here is the error Expecting 7585.23
7585.225 --> when not rounded
Testfälle:
DECLARE @test float = 7585.225;
SELECT ROUND(@test,2) AS Result; --> results 7585.23
SELECT ROUND(7585.225,2) AS Result --> results 7585.23
Einzelne Werte in eine temporäre Tabelle einfügen und dann die Summe berechnen
DECLARE @TmpTable table
(
MaterialAmount float
,LaborAmount float
);
INSERT INTO @TmpTable VALUES (12.10,1218.75);
INSERT INTO @TmpTable VALUES (12.10,1090.125);
INSERT INTO @TmpTable VALUES (12.10,900);
INSERT INTO @TmpTable VALUES (12.10,1632.6);
INSERT INTO @TmpTable VALUES (12.10,1625);
INSERT INTO @TmpTable VALUES (12.10,1118.75);
SELECT ROUND(ISNULL((SELECT SUM(MaterialAmount) FROM @TmpTable), 0),2) AS MatSum,
ISNULL((SELECT SUM(LaborAmount) FROM @TmpTable), 0) AS LabSumUnrounded, --> 7585.225
ROUND(ISNULL((SELECT SUM(LaborAmount) FROM @TmpTable), 0),2) AS LabSum; --> 7585.23
SELECT ROUND(SUM(MaterialAmount),2),
ROUND(SUM(LaborAmount),2) ---> 7585.23
FROM @TmpTable;
Irgendeine Idee / ein Vorschlag, warum ich 0,01 Unterschiede in meinem ursprünglichen Szenario erhalte, während ich genaue Werte in allen meinen Testfällen erhalte? Danke im Voraus.