Błąd zaokrąglania SQL Server, Podawanie różnych wartości

Mam procedurę składowaną, która wykonuje wiele obliczeń, przechowuje wyniki w kilku tabelach tymczasowych. Wreszcie obliczenie sumy i zaokrąglenie do dwóch miejsc po przecinku i zapisanie w tabeli tymczasowej i wybranie tego.

Cała pośrednia i końcowa tabela tymczasowa ma typ danych float dla kolumny zainteresowania.

oryginalny scenariusz:

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

Przypadki testowe :

   DECLARE @test float = 7585.225;
   SELECT ROUND(@test,2) AS Result; --> results 7585.23

   SELECT ROUND(7585.225,2) AS Result --> results 7585.23

Wstawiono poszczególne wartości do tabeli tymczasowej, a następnie obliczono sumę

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;

Jakikolwiek pomysł / sugestia, dlaczego dostaję różnicę 0,01 w moim oryginalnym scenariuszu, uzyskując jednocześnie dokładne wartości we wszystkich testach? Z góry dziękuję.

questionAnswers(2)

yourAnswerToTheQuestion