SQL Server,除法返回零

Roc*_*och 75 sql

这是我在示例中使用的代码:

 PRINT @set1
 PRINT @set2

 SET @weight= @set1 / @set2;
 PRINT @weight
Run Code Online (Sandbox Code Playgroud)

结果如下:

47
638
0
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*tin 137

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

SET @weight= CAST(@set1 AS float) / CAST(@set2 AS float);
Run Code Online (Sandbox Code Playgroud)


Han*_*ing 20

当你只使用一个除法中的整数时,你会得到整数除法.当您使用(至少一个)double或float时,您将获得浮点除法(以及您想要获得的答案).

所以你可以

  1. 将一个或两个变量声明为float/double
  2. 将一个或两个变量转换为float/double.

不要只将整数除法的结果转换为double:除法已经作为整数除法执行,因此小数后面的数字已经丢失.

  • +1因为我认为你解释得更好一点,并提到只有一个值需要是float/double (2认同)

小智 11

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


HLG*_*GEM 9

简单地将除法的底部略微增加1.0(或者你想要的小数位数)

PRINT @set1 
PRINT @set2 
SET @weight= @set1 / @set2 *1.00000; 
PRINT @weight
Run Code Online (Sandbox Code Playgroud)