5

ストアドプロシージャには、次のような式があります

select @some_val_in_percents = (@total_val / 100) * @some_val

Roundこのような関数を使用する場合:

select @some_val_in_percents = Round((@total_val / 100) * @some_val, 0)

式全体が計算されるときに結果が丸められますか、それとも(@total_val / 100)丸められてから乗算され@some_valますか?

4

2 に答える 2

11

パーセント値を間違って計算しているようです。これが私がそれがどのようになると期待するかです:

@some_val * 100 / @total_val

関数に関してROUND()は、部分的な結果ではなく、式の最終的な結果に作用します。したがって、最初に式が完全に評価され、次にROUND()結果に適用されます。

また、除算演算子の両方のオペランドが整数の場合、SQL Serverは整数除算を実行します。つまり、除算の結果は、適用されるであっても、最も近い整数に切り捨てられることに注意してください。 。これを避けたい場合は、オペランドの少なくとも1つが整数でないことを確認してください(例:次のように)。 ROUND()

ROUND(@some_val * 100.0 / @total_val, 2)

Transact-SQLROUND()で必要な2番目の引数(精度)にも注意してください。

于 2012-04-23T10:45:58.390 に答える
2

Roundその内容が評価された後に計算されます。

したがって(@total_val / 100) * @some_val、丸められます。

于 2012-04-23T10:35:27.623 に答える