我跑在SQL Server 2012中SQL Server 2012的整數除法小數位數
SELECT CONVERT(DECIMAL(7,2),4)/CONVERT(DECIMAL (7,2),3)
下,得到了以下幾點。
1.3333333333
我相信DECIMAL
對待7精密和2的規模,所以我不應該得到的結果爲2位小數?
我跑在SQL Server 2012中SQL Server 2012的整數除法小數位數
SELECT CONVERT(DECIMAL(7,2),4)/CONVERT(DECIMAL (7,2),3)
下,得到了以下幾點。
1.3333333333
我相信DECIMAL
對待7精密和2的規模,所以我不應該得到的結果爲2位小數?
您還需要將結果轉換爲DECIMAL(7,2)。例如:
SELECT CONVERT(DECIMAL(7,2), CONVERT(DECIMAL(7,2),4)/CONVERT(DECIMAL (7,2),3))
這會給你:
1.33
據MSDN,當你把e1/e2
這是decimal(p1, s1)
和decimal(p2, s2)
,
導致精度 p1 - s1 + s2 + max(6, s1 + p2 + 1)
導致規模 max(6, s1 + p2 + 1)
所以,你得到的精度7 - 2 + 2 + max(6, 2 + 2 + 1)
= 13
和規模max(6, 2 + 7 + 1)
= 10
爲decimal(13, 10)
結果的原因是,你會失去準確性,如果你不擴大,精度和範圍取決於操作數:看.5/2 = .25並與.5/20 = 0.025進行比較。如果您使用money
類型,您可能遲早會遇到這種情況,因爲它具有固定的四位數字「比例」。例如:https://stackoverflow.com/a/582819/155892