A questão é relativamente simples. Preciso calcular 3 colunas em que os resultados intermediários são decimais enormes e estou enfrentando um problema no início com o SQL Server basicamente arredondando os decimais, independentemente de qualquer conversão / conversão.
Por exemplo, vamos fazer uma divisão simples como 1234/1233. Uma calculadora produzirá 1.00081103000811. Mas quando faço isso no SQL Server, obtemos o seguinte:
-- Result: rounded at 1.000811000... with trailing zeroes up until the 37 precision
SELECT CAST(CAST(1234 AS DEC(38,34))/CAST(1233 AS DEC(38,34)) AS DEC(38,37))
-- Result: rounded at 1.000811
SELECT CONVERT(DECIMAL(38,32), 1234)/CONVERT(DECIMAL(38,32),1233)
-- Correct result at 1,00081103000811
-- But this requires the zeroes to be put in manually when you don't
-- even know the precision of the end result
SELECT 1234.0/1233.00000000000000
Por que esse arredondamento automático ocorre? E qual é a melhor maneira de calcular valores decimais insanamente longos quando você não tem certeza do tamanho de um número (a parte int ou dec), pois a tabela pode conter vários valores diferentes?
Obrigado!