整数除法SQL查询产生意外的小数位数



我正在尝试使用以下查询获取总金额

SELECT SUM(Quantity * UnitPrice * (Discount/100)) 
FROM Stock_Purchase_Details

我的表格结构

Proid | unitprice | discountrate(inpercentage) | proqty
1     |  10.00    | 10.00                      |  10
2     |  10.00    | 10.00                      |  10

我预计总金额为20.00,但我使用的查询返回的结果是20.00000000——为什么?

注释很好地描述了结果是正确的,以及您可以做些什么来获得所需格式的结果(只需将其转换为所需的数据类型:CONVERT(decimal(5, 2), calculation))。

我觉得为什么没有得到回答,这是你真正的问题。您正在用integer划分decimal(5, 2)。SQL server将除数(100)隐式转换为被除数的数据类型(decimal(5,2)),因为数据类型必须匹配,并且decimal优先于integer。除法的输出也是decimal,但精度和比例是经过计算的。输出比例为max(6, scale of dividend + precision of divisor + 1)=max(6, 2 + 5 + 1)。所以你最终得到了一个8的刻度,因此得到了8个零。

事实上,最终的结果是一个DECIMAL(13, 8),是完全完整的。

SELECT CAST(SUM(Quantity * UnitPrice * (Discount/100)) AS DECIMAL(4,2)) 
FROM Stock_Purchase_Details

最新更新