0
`declare @totalItems int,
@totalPeople int,
@averageThings float;

select @totalItems = count(*) from table1
select @totalpeople = count(*) from tblvisits
select @averageThings = cast(@totalItems/@totalPeople as float)

select @averageThings, @totaPeople, @totalItems

这将返回一个整数而不是一个浮点数,我尝试了使用和不使用cast as float并得到了相同的结果,如何让它返回一个浮点数

4

3 回答 3

2

问题是您正在以整数进行除法,然后将结果转换为float. 也许:

declare @totalItems int,
@totalPeople int,
@averageThings float;

select @totalItems = count(*) from table1
select @totalpeople = count(*) from tblvisits
select @averageThings = @totalItems/cast(@totalPeople as float)

select @averageThings, @totaPeople, @totalItems

在除法发生之前强制其中一个参数为 a float,这将迫使除法float改为执行。


而且,作为一个小问题:

这将返回一个整数而不是浮点数

不,它返回一个float. 但是总是碰巧有一个整数值。

于 2012-05-17T13:24:49.830 回答
2

不,它返回一个浮点数。浮点数的值可能是整数,但类型是浮点数。这也回答了您真正的问题:您必须使用浮点操作数执行除法,而不是将 int 除法的结果转换为浮点数:

declare @totalItems float,
   @totalPeople float,
   @averageThings float;

select @totalItems = count(*) from table1
select @totalpeople = count(*) from tblvisits
select @averagecomorbids = @totalItems/@totalPeople;

select @averageThings, @totaPeople, @totalItems;

tblvisits如果为空,您的代码将与 divide_by_zero 中断...

于 2012-05-17T13:25:45.217 回答
0

你需要铸造每个部分

  cast(@totalItems as float)/cast(@totalPeople as float)

现在它正在用整数进行除法并在强制转换之前获得整数结果。

于 2012-05-17T13:28:55.350 回答