2015-10-16 125 views
0

我有一個很奇怪的SQL問題。我有一個數字爲22的單元格,當我想將它舍入時,結果不正確。SQL四捨五入的錯誤

如果我嘗試使用數字而不是單元格,代碼運行良好。

select Mora2, round(Mora2/30,0)*30, mora2+1, 
round((mora2+1)/30,0)*30, round(convert(float,mora2)/30,0)*30 
from Trimestre 

的,其結果是

Mora2 (No column name) (No column name) (No column name) (No column name) 

22   30     23     30     30 

如果我嘗試次數,代碼效果很好。

select round(22/30,0)*30 as Mora2 

Mora2 
0 

爲什麼可能呢?

謝謝!

+3

Mora2的數據類型是什麼?第二個例子是整數,你會得到一個不同的結果,如果你做22.0/30 –

+0

嗨,詹姆斯!數據類型是float!另外,我有28573個寄存器,但只有866個這樣的錯誤!你知道那是爲什麼嗎? – mschapiro

回答

1

無論何時使用它去除小數部分並確保整數除法,您都可以使用CAST(Mora2 AS INT)

當分子或分母不是整數時,除法的結果將有小數位。因此22.0/30 = 0.73333322/30 = 0

+0

是的!這就像你說的!用int來解決問題。奇怪的是,我不明白的是,我有28573個寄存器(全都像浮點數),而且數字相似,只有866個有這個問題! – mschapiro