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

Aym*_*man 1 sql sql-server sql-server-2008

我想使用以下查询获取总金额

SELECT SUM(Quantity * UnitPrice * (Discount/100)) 
FROM Stock_Purchase_Details
Run Code Online (Sandbox Code Playgroud)

我的桌子结构

Proid | unitprice | discountrate(inpercentage) | proqty
1     |  10.00    | 10.00                      |  10
2     |  10.00    | 10.00                      |  10
Run Code Online (Sandbox Code Playgroud)

我希望总金额为20.00,但我使用的查询返回此结果20.00000000- 为什么?

Hon*_*ger 5

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

为什么,我觉得,没有得到回答,这是你的实际问题.您将一个decimal(5, 2)带有integer.SQL服务器隐式注塑除数(100)股息(的数据类型decimal(5,2)),因为该数据类型必须匹配,并decimal采用优先级超过一个integer.除法的输出也是a decimal,但计算精度和比例.输出比例为max(6, scale of dividend + precision of divisor + 1)= max(6, 2 + 5 + 1).所以你最终得到的8是8个零.

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