使用除法运算符时,不要理解sql server中的舍入行为

时间:2010-12-15 17:08:13

标签: sql-server-2005 rounding

有人可以解释以下sql代码中会发生什么吗?

  

声明@dividend numeric(38,22)

     

声明@divisor numeric(38,22)

     

声明@otherDivisor int

     

设置@dividend = 1

     

设置@divisor = 3

     

设置@otherDivisor = 3

     

选择演员表(@dividend / @divisor作为数字(38,22)),@ dividend / @otherDivisor

返回的结果是

  
     

0.3333330000000000000000 0.3333333333333333333333

我希望两次计算都能得到相同的结果。

3 个答案:

答案 0 :(得分:0)

其实我回答了这个问题。看起来SQL似乎将结果强制转换为具有更高优先级,被除数或除数的结果。

      select 1.00000000000000000000/3.0
      select 1.0/3.0

答案 1 :(得分:0)

试试这个:

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

你在分裂后正在施展。

答案 2 :(得分:0)

decimal(38,22)/ decimal(38,22)以these rules后面的小数(x,6)结束

所以你在回到十进制(38,22)之前有0.33333

@otherDivisor被强制转换为(38,0)并保持为十进制(x,22)

查看我的工作example