2011-07-23 18 views
1

を維持しながら、ユーザー定義のステップに番号のリストを四捨五入:私は数字を四捨五入に関する記事をたくさん読んできたが、私は私がやりたいために管理することができませんでしたそれらの和

私は積極的なフロートのリストを持っています。 符号なし整数roundOffStepは、ユーザー定義です。私はそれ以外のコントロールはありません。

これらの数値の合計を保持しながら、または少なくとも新しい合計を元の合計よりも低く保ちながら、最も正確な丸めを実行できるようにしたいと考えています。

どうすればいいですか?私はアルゴリズムにひどいので、これはあまりにも難しいことです。

Thx。

EDIT:テストケースを追加:

FLOATS 
    29.20 
    18.25 
    14.60 
    8.76 
    2.19 

和= 73。

たとえば、roundOffStep = 5;

ROUNDED FLOATS 
30 
15 
15 
10 
0 

合計= 70 < 73 OK

+0

「roundOffStep」の意味は? – Saphrosit

+0

テストケースを追加できますか? ;) – Sailesh

+0

roundOffStepは、数値を四捨五入するために使用されるステップです。 – CocoaTree

答えて

1
  1. ラウンド通常roundOffStepの最も近い倍数にすべての数字。
  2. 新しい合計が元の合計よりも低い場合は、完了です。
  3. 各番号については、rounded_number - original_numberを計算してください。この差異のリストを降順に並べ替え、最大の差異を持つ数字を見つけることができます。
  4. 最大の差異を与える番号を選択してください。rounded_number - original_number、その番号からroundOffStepを減算します。
  5. 新しい合計が元の値より小さくなるまで、ステップ4(毎回次の最大の差を選択)を繰り返します。

このプロセスでは、元の合計を超えることなく、丸められた数値ができるだけ元のものに近くなるようにする必要があります。 と

例:

Original Numbers | Rounded | Difference 
----------------------+------------+-------------- 
     29.20  |  30  |  0.80 
     18.25  |  20  |  1.75 
     14.60  |  15  |  0.40 
     8.76   |  10  |  1.24 
     2.19   |  0  | -2.19 
----------------------+------------+-------------- 
Sum:  73   |  75  | 

和が大きすぎるので、我々は今、合計である15を与えるために5(20に丸めた18.25)と減算最大差を与える数を選びます70、それで終わりました。

+0

ありがとう、私はそれを試してみましょう。 – CocoaTree

+0

魅力的な作品:http://twitgoo.com/2khl5u – CocoaTree

関連する問題