这个问题相对简单。我需要计算3列,中间结果是很大的小数,并且SQL Server早就遇到了一个问题,即无论是否进行任何类型的转换,SQL Server基本上都会舍入小数。
例如,让我们做一个简单的除法1234/1233。计算器将产生1,00081103000811。但是,当我在SQL Server上执行此操作时,我们得到以下信息:
-- 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
为什么会发生这种自动舍入?当您不确定某个数字(int或dec的一部分)将有多大时,由于表格中可能包含各种不同的值,因此计算疯狂的长十进制值的最佳方法是什么?
谢谢!