以下是我在示例中使用的代码:
PRINT @set1
PRINT @set2
SET @weight= @set1 / @set2;
PRINT @weight
结果如下:
47
638
0
我想知道为什么它会返回0
而不是0,073667712
答案 0 :(得分:130)
将set1和set2声明为浮点数而不是整数,或者将它们作为计算的一部分投射到浮点数中:
SET @weight= CAST(@set1 AS float) / CAST(@set2 AS float);
答案 1 :(得分:18)
如果在分区中仅使用整数,则会得到整数除法。当您使用(至少一个)double或float时,您将获得浮点除法(以及您想要获得的答案)。
所以你可以
不要只将整数除法的结果转换为double:除法已经作为整数除法执行,因此小数后面的数字已经丢失。
答案 2 :(得分:11)
因为它是一个整数。您需要将它们声明为浮点数或小数,或者在计算中转换为等值。
答案 3 :(得分:9)
只需将除法的底部乘以1.0(或任意多个小数位)
PRINT @set1
PRINT @set2
SET @weight= @set1 / @set2 *1.00000;
PRINT @weight
答案 4 :(得分:2)
如果您将其声明为float或任何十进制格式,则会显示
0
仅
例如:
declare @weight float;
SET @weight= 47 / 638; PRINT @weight
输出:0
如果您希望输出为
0.073667712
E.g
declare @weight float;
SET @weight= 47.000000000 / 638.000000000; PRINT @weight
答案 5 :(得分:1)
在SQL Server中,两个整数的直接除法返回整数,即使结果应该是float。下面有一个例子可以解决这个问题:
--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。尽管以正确的精度定义了第二个块,但结果将是3.00000。