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

これは float の代わりに整数を返します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

除算が発生する前に、引数の 1 つを強制的に afloatにします。これにより、代わりに除算が強制的に実行されfloatます。


そして、些細な疑問として:

これは float ではなく整数を返します

いいえ、それは を返しますfloat。しかし、常にたまたま整数値を持つもの。

于 2012-05-17T13:24:49.830 に答える
2

いいえ、フロートを返します。float の値は整数の場合がありますが、型は float です。これはあなたの本当の質問にも答えます: int 除算の結果を float にキャストするのではなく、float オペランドを使用して除算を実行する必要があります。

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;

が空の場合、コードはdivide_by_zeroで壊れtblvisitsます...

于 2012-05-17T13:25:45.217 に答える
0

各パーツをキャストする必要があります

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

現在、整数で除算を行っており、キャストの前に整数の結果を取得しています。

于 2012-05-17T13:28:55.350 に答える