2012-10-30 123 views
0

這裏是我運行SQL Server 2008中計算錯誤

Select (100/18)*18 

查詢答案我得到的是90.我試圖聲明的每一個號碼爲也小數,和我得到的值100.0008,但是當我用變量作爲浮點數計算答案在'100'是正確的,所以任何人都不知道SQL爲什麼會這樣計算?

+1

[運算符優先級(HTTP ://msdn.microsoft.com/en-us/library/ms190276.aspx)永遠不要以爲RDBMS有bug。 – JeffO

回答

7

,因爲它首先evelute的paranthesis

所以

Select (100/18)*18 

會(一十八分之一百)= 5.555555,但假設這兩個數爲INT所以它會施放結果爲INT所以它會返回5

所以現在5*18 = 90

如果你想正確的結果做到這一點,而不是Select (100*18)/18

0

你可以試試這個

select abs(18*100/18) 
+0

雖然可能不需要ABS,但由於默認優先級(M,D,A,S),所以可以使用。爲什麼是負面投票? – JeffO

+0

abs可能不需要,但是當數據改變時。這是必需的。根據這個問題,答案是正確的 – SRIRAM

1

試圖表達的numders交流十進制數

SELECT (100.0/18)*18 

SELECT ROUND((100.0/18)*18,2) 

...

2

,以獲得期望的結果你應該嘗試這樣的事情:

Select CEILING((100/18.0)*18) 
當你做到這一點

Select (100/18)*18 

的SQL Server考慮操作整數除法,並採取選擇十八分之百5 instaed 5.55555的....