Quando utilizo a variável @PRECO como um DECIMAL o resultado sai um pouco abaixo do esperado, e quando utilizo como sendo do tipo FLOAT o resultado saiu correto. Já a variável acumulativa, no meu caso eu utilizei a @FATURAMENTO, não faz diferença ser utilizada como um DECIMAL ou FLOAT, apenas a exibição final é afetada. Queria saber o por quê do resultado oscilar devido ao tipo de dado ser FLOAT ou DECIMAL.
Segue o meu código
DECLARE @ANO AS INT = 2017, @MES AS INT = 1
DECLARE @FATURAMENTO DECIMAL = 0
DECLARE @QTD INT, @PRECO FLOAT -- QUANDO UTILIZO DECIMAL O RESULTADO SAIU UM POUCO ABAIXO DO ESPERADO
DECLARE CURSOR_FATURAMENTO CURSOR FOR
SELECT INF.[QUANTIDADE], INF.[PREÇO]
FROM [ITENS NOTAS FISCAIS] INF INNER JOIN
[NOTAS FISCAIS] NF
ON INF.[NUMERO] = NF.NUMERO
WHERE YEAR(NF.[DATA]) = @ANO AND MONTH(NF.[DATA]) = @MES
OPEN CURSOR_FATURAMENTO
FETCH NEXT FROM CURSOR_FATURAMENTO INTO @QTD, @PRECO
WHILE @@FETCH_STATUS = 0
BEGIN
SET @FATURAMENTO = @FATURAMENTO + (@QTD * @PRECO)
FETCH NEXT FROM CURSOR_FATURAMENTO INTO @QTD, @PRECO
END -- WHILE
PRINT 'FATURAMENTO: ' + CONVERT(VARCHAR(MAX),@FATURAMENTO)
CLOSE CURSOR_FATURAMENTO
DEALLOCATE CURSOR_FATURAMENTO