gpt4 book ai didi

sql-server - 为什么将和乘以其他数字时精度会降低

转载 作者:行者123 更新时间:2023-12-02 07:31:14 25 4
gpt4 key购买 nike

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

当我使用 SUM (*column*) 时,其中 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

第二个 SELECT 查询的结果

0.000000    0.00000006  -0.00000006 0.000000

如您所见,我将 SUM 相乘,结果为 0.000000

谁能解释一下这种奇怪的行为吗?

UPD。我在 2000、2005 和 2008 SQL Server 上的 SQL Management Studio 中执行了此查询。

最佳答案

使用 SUM 聚合 numeric(18, 8)结果为数据类型 numeric(38, 8)

可以在此处找到将某些内容与数值相乘时如何计算结果数据类型:Precision, Scale, and Length (Transact-SQL)

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

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

最大精度为 38,剩下的就是 numeric(38, 6)

详细了解为什么它是数字(38, 6):Multiplication and Division with Numerics

关于sql-server - 为什么将和乘以其他数字时精度会降低,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14313598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com