La domanda è relativamente semplice. Ho bisogno di calcolare 3 colonne in cui i risultati medi sono decimali enormi, e mi imbatto in un problema all'inizio con SQL Server sostanzialmente arrotondando i decimali indipendentemente da qualsiasi cast / convertito.
Ad esempio, facciamo una divisione semplice come 1234/1233. Una calcolatrice produrrà 1.00081103000811. Ma quando lo faccio su SQL Server, otteniamo quanto segue:
-- 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
Perché si verifica questo arrotondamento automatico? E qual è il modo migliore per calcolare valori decimali follemente lunghi quando non puoi essere sicuro di quanto sarà grande un numero (la parte int o dec), poiché la tabella può contenere vari valori diversi?
Grazie!