以下の T-SQL コードを検討してください。a、b、c の現在の値に基づいて比例配分される 10 単位を a、b、c に割り当てたいと考えています。
この場合、
select @a + @b + @c
計算後は、期待どおり正確に 10 です。
ただし、私のクライアント アプリケーションでは、値はストアド プロシージャから次のように返されます。
4.72222222222222, 4.72222222222222, 0.555555555555556
合計すると、9.999999999999996 になります。
大雑把に言えば、問題は 4.72222222222222 の両方の値の末尾に 2 が欠落しているように思われ、それらを手動で追加すると、期待どおりに結果 = 10 になります。
逆に、0.555555555555556 の 5 が 1 少ない場合 (0.55555555555556 など)、合計結果 = 10 になります。
これをエレガントに処理する方法を提案できる人はいますか? 各結果の精度はそれほど重要ではありませんが、常に元の値に戻すことが重要です@adjustby
。
declare @totalOwned float
declare @adjustby float
declare @a float
declare @b float
declare @c float
set @adjustby = 10
set @a = 85
set @b = 85
set @c = 10
set @totalOwned = @a + @b + @c
select @a = @adjustby * (@a/@totalOwned)
select @b = @adjustby * (@b/@totalOwned)
select @c = @adjustby * (@c/@totalOwned)
select @a + @b + @c,@a,@b,@c