2010-12-15 42 views
1

有人可以解釋下列sql代碼中會發生什麼嗎?使用除法運算符時,不理解sql server中的舍入行爲

申報@dividend數字(38,22)

申報@divisor數字(38,22)

聲明@otherDivisor詮釋

組@dividend = 1

集@divisor = 3

set @otherDivisor = 3

選擇鑄造(@dividend/@divisor爲數字(38,22)),@dividend/@otherDivisor

返回的結果是


0.3333330000000000000000 0.3333333333333333333333

我希望兩次計算的結果都一樣。

回答

0

十進制(38,22)/十進制(38,22)與十進制(X,6)以下these rules

所以,你必須0.33333你施放回十進制(38,22)

前結束

@otherDivisor被轉換爲(38,0),並保持爲十進制(X,22)

見我的工作example

+0

非常感謝您的回答。你是否知道有任何圍繞此行爲的方法? – ralf 2010-12-16 15:35:54

+0

@Ralf:遵循正常的數學規則,就像在現實生活中乘以小數位(2dp x 3 dp給出6 dp)。浮動可能會更好,但會犧牲一些準確性。 – gbn 2010-12-16 15:55:33

0

其實我回答了這個問題。看起來好像SQL強制結果是具有更高優先級,紅利或除數的結果。

 select 1.00000000000000000000/3.0 
     select 1.0/3.0 
0

試試這個:

select cast(@dividend as numeric(38,22))/@divisor, @dividend/@otherDivisor 

你正在做的分裂後鑄造。