为什么在将和与其他数相乘时精度会下降

Vic*_*lin 14 sql-server sql-server-2005 sql-server-2008

我在SQL Server中遇到过以下错误(或功能).

当我使用SUM (*column*)where column有一个numeric(18, 8)类型并将它乘以任何其他数字(整数或十进制)时,结果精度将减少到numeric(18, 6).

这是演示的示例脚本.

CREATE TABLE #temp (Qnty numeric(18,8))

INSERT INTO #temp (Qnty) VALUES (0.00000001)
INSERT INTO #temp (Qnty) VALUES (0.00000002)
INSERT INTO #temp (Qnty) VALUES (0.00000003)

SELECT Qnty, 1*Qnty
FROM #temp

SELECT (-1)*SUM(Qnty), SUM(Qnty), -SUM(Qnty), SUM(Qnty) * CAST(2.234 as numeric(18,8))
FROM #temp

DROP TABLE #temp
Run Code Online (Sandbox Code Playgroud)

第二个SELECT查询的结果

0.000000    0.00000006  -0.00000006 0.000000
Run Code Online (Sandbox Code Playgroud)

如您所见,然后我乘以SUM,结果为0.000000

谁有人能解释这种奇怪的行为?

UPD.我在SQL Server Studio 2000,2005和2008 SQL Server上执行了此查询.

Mik*_*son 8

numeric(18, 8)使用SUM聚合a会 导致数据类型numeric(38, 8).

可以在此处找到将数字乘以数字时计算结果数据类型的方法:精度,比例和长度(Transact-SQL)

常量-1的数据类型是 numeric(1, 0)

精度p1 + p2 + 1= 40
比例s1 + s2= 8

最高精度为38,离开你numeric(38, 6).

阅读更多关于它为什么的numeric(38, 6)信息:使用数字进行乘法和除法