La pregunta es relativamente simple. Necesito calcular 3 columnas donde los resultados intermedios son decimales enormes, y me encuentro con un problema temprano con SQL Server básicamente redondeando los decimales independientemente de cualquier conversión / conversión.
Por ejemplo, hagamos una división simple como 1234/1233. Una calculadora producirá 1,00081103000811. Pero cuando hago esto en SQL Server, obtenemos lo siguiente:
-- 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 qué ocurre este redondeo automático? ¿Y cuál es la mejor manera de calcular valores decimales increíblemente largos cuando no puede estar seguro de qué tan grande será un número (la parte int o dec), ya que la tabla puede contener varios valores diferentes?
¡Gracias!