这是我在示例中使用的代码:
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);
当你只使用一个除法中的整数时,你会得到整数除法。当您使用(至少一个)double或float时,您将获得浮点除法(以及您想要获得的答案)。
所以你可以
不要只将整数除法的结果转换为double:除法已经作为整数除法执行,因此小数后面的数字已经丢失。
因为它是一个整数。您需要将它们声明为浮点数或小数,或者在计算中转换为浮点数或小数。
只需将除法的底部乘以1.0(或您想要的小数位数)
PRINT @set1
PRINT @set2
SET @weight= @set1 / @set2 *1.00000;
PRINT @weight
如果您将其声明为float或任何十进制格式,它将显示
0
只要
E.g:
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
在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。