SQL Server如何确定舍入时的有效位数

时间:2014-07-28 22:08:21

标签: sql sql-server sql-server-2008

我有两个需要很高精度的数据库字段 - 一列是十进制(36,12),另一列是十进制(36,24)。

当它们相乘时,我期待精度将被保留,但似乎并非如此 - 实际上我的精度会降低。例如,在运行以下SQL时:

SELECT 3.035 * 0.333333333333333333333333 AS Normal

SELECT CAST(3.035 AS DECIMAL(36,12)) * CAST(0.333333333333333333333333 AS DECIMAL(36,24)) AS Cast12

SELECT CAST(3.035 AS DECIMAL(36,24)) * CAST(0.333333333333333333333333 AS DECIMAL(36,24)) AS Cast24

我得到以下结果:

Normal : 1.011666666666666666666665655

Cast12 : 1.011667

Cast24 : 1.0116666666667

我想这是因为乘法操作通常产生“更大”的数字。我显然可以找到解决方法(Cast24“足够好”),但我想了解SQL Server究竟如何确定何时进行舍入以及要保留哪些数字?