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

时间:2015-12-15 13:33:29

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

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

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 - 为什么会这样?

2 个答案:

答案 0 :(得分:5)

评论描述得很好,结果是正确的,你可以做些什么来得到你需要的格式的结果(只需将其转换为所需的数据类型:CONVERT(decimal(5, 2), calculation))。

为什么,我觉得,没有得到回答,那是你的实际问题。 您将decimal(5, 2)除以integer。 SQL服务器隐式地将除数(100)强制转换为被除数(decimal(5,2))的数据类型,因为数据类型必须匹配,而decimal需要precedence超过{calculated 1}}。除法的输出也是integer,但精度和比例是{{3}}。输出比例为decimal = max(6, scale of dividend + precision of divisor + 1)。因此,最终得分为max(6, 2 + 5 + 1),因此为8个零。

事实上,最终结果是8,完全是完整的。

答案 1 :(得分:1)

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