这是我在示例中使用的代码:
PRINT @set1
PRINT @set2
SET @weight= @set1 / @set2;
PRINT @weight
结果如下:
47
638
0
我想知道为什么它返回0
而不是0,073667712
Answers:
当在除法中仅使用整数时,将获得整数除法。当使用(至少一个)double或float时,将得到浮点除法(以及要获得的答案)。
这样你就可以
不要只是将整数除法的结果转换为两倍:除法已经作为整数除法执行,因此小数点后的数字已经丢失。
只需简单地将除法的底部除以1.0(或所需的小数位数)
PRINT @set1
PRINT @set2
SET @weight= @set1 / @set2 *1.00000;
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。尽管以正确的精度定义了第二个块,结果仍为3.00000。