加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 为什么当乘以和其他数字时精度正在减少

发布时间:2020-12-12 08:33:06 所属栏目:MsSql教程 来源:网络整理
导读:我在SQL Server中遇到了以下错误(或功能). 当我使用SUM(*列*),其中列具有数字(18,8)类型,并将其乘以任何其他数字(整数或十进制),结果精度将减少为数字(18,6). 以下是演示的示例脚本. CREATE TABLE #temp (Qnty numeric(18,8))INSERT INTO #temp (Qnty) VALUES
我在SQL Server中遇到了以下错误(或功能).

当我使用SUM(*列*),其中列具有数字(18,8)类型,并将其乘以任何其他数字(整数或十进制),结果精度将减少为数字(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

第二个SELECT查询的结果

0.000000    0.00000006  -0.00000006 0.000000

正如你可以看到,我乘以SUM的结果是0.000000

有人可以解释奇怪的行为吗?

UPD.我在2000,2005和2008 SQL Server的SQL Management Studio中执行了这个查询.

解决方法

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

如何在将数值乘以数字时计算出结果数据类型,可以在这里找到:Precision,Scale,and Length (Transact-SQL)

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

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

最大精度为38,并带有数字(38,6).

阅读更多关于为什么它是数字(38,6)在这里:Multiplication and Division with Numerics

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读