Dlaczego precyzja maleje, gdy mnożymy sumę do innej liczby
Spotkałem się z następującym błędem (lub funkcją) w SQL Server.
Kiedy używamSUM (*column*)
gdziecolumn
manumeric(18, 8)
wpisz i pomnóż go do dowolnej innej liczby (liczby całkowitej lub dziesiętnej), do której zmniejsza się precyzja wynikunumeric(18, 6)
.
Oto przykładowy skrypt do zademonstrowania.
CREATE TABLE #temp (Qnty numeric(18,8))
INSERT INTO #temp (Qnty) VALUES (0.00000001)
INSERT INTO #temp (Qnty) VALUES (0.00000002)
INSERT INTO #temp (Qnty) VALUES (0.00000003)
SELECT Qnty, 1*Qnty
FROM #temp
SELECT (-1)*SUM(Qnty), SUM(Qnty), -SUM(Qnty), SUM(Qnty) * CAST(2.234 as numeric(18,8))
FROM #temp
DROP TABLE #temp
Wynik drugiego zapytania SELECT
0.000000 0.00000006 -0.00000006 0.000000
Jak widać, mnożę SUM wynik wynosi 0,000000
Czy ktoś mógłby wyjaśnić dziwne zachowanie?
UPD. Wykonałem to zapytanie w SQL Management Studio na 2000, 2005 i 2008 SQL Server.