SQL Server,部门返回零

这里是我在这个例子中使用的代码:

PRINT @set1 PRINT @set2 SET @weight= @set1 / @set2; PRINT @weight 

结果如下:

 47 638 0 

我想知道为什么它返回0而不是0,073667712

要么将set1和set2声明为浮点而不是整数,要么将它们转换为浮点数作为计算的一部分:

 SET @weight= CAST(@set1 AS float) / CAST(@set2 AS float); 

因为它是一个整数。 您需要将它们声明为浮点数或小数,或者在计算中将其转换为浮点数或小数。

当你在一个部门使用整数,你会得到整数除法。 当你使用双/浮动,你会得到浮点除法(和你想要得到的答案)。

所以你可以

  1. 将一个或两个variables声明为float / double
  2. 将其中一个或两个variables浮动/浮动。

不要把整数除法的结果加倍:除法已经作为整数除法执行,所以小数点后面的数字已经丢失了。

简单地将分数的底部减去1.0(或者你想要的小数位数)

 PRINT @set1 PRINT @set2 SET @weight= @set1 / @set2 *1.00000; PRINT @weight 

如果你声明它为浮点数或任何十进制格式,它将显示

0

只要

例如:

 declare @weight float; SET @weight= 47 / 638; PRINT @weight 

输出:0

如果你想要的输出

0.073667712

例如

 declare @weight float; SET @weight= 47.000000000 / 638.000000000; PRINT @weight 

在SQL Server直接划分两个整数返回整数,即使结果应该是浮点数。 下面有一个例子来说明:

 --1-- declare @weird_number_float float set @weird_number_float=22/7 select @weird_number_float --2-- declare @weird_number_decimal decimal(18,10) set @weird_number_decimal=22/7 select @weird_number_decimal --3-- declare @weird_number_numeric numeric set @weird_number_numeric=22/7 select @weird_number_numeric --Right way declare @weird_number float set @weird_number=cast(22 as float)/cast(7 as float) select @weird_number 

只是最后一块将返回3,14285714285714。 尽pipe以正确的精度定义第二个块,结果将是3.00000。