2010-12-03 9 views
0

私のアプリケーションには、新しい機能のための領域が書かれています。 私たちがやりたいことは、1人または複数の銀行間で分割する必要のある特定の通貨で、トランセックのメッセージがクライアントによって送信されるときです。パーセントでの結果の除算

転送メッセージが送信されるたびに、銀行Aに80%、銀行Bに20%など。 db(sql 2005)にこれを組み込む必要があります。そうすれば、%変更が可能になります。 メッセージの80%が銀行Aに送信され、20%が銀行に残っている額に基づいて銀行bに送信される場合の計算のスペックを書くのが難しいです。私は当初、メッセージを数え、その割合に基づいて計算を行っていたが、了解していないかどうかは分かりませんでした。手伝ってくれますか?

答えて

0

あなたは結果を保証する必要がない場合、あなたは単に乱数ジェネレータのルーティングをベースにできます。

var r = rand() // assume it yields a decimal between 0.0 and 1.0 
if (r < 0.2) sendToBankB() 
else   sendToBankA() 

上記明らかにハードコードされたとちょうど2つの銀行のための簡略化されていますが、私はあなたがN個の割合でN個の銀行のためにそれを一般化する方法を見ることができたと思います。パーセントで並べ替え、配列を順番にテストします。

正確にする必要がある場合(銀行Aに4を、銀行Bに5を常に送信する)、カウンタを実装する必要があると思います。

  • 奇妙な比率(51%と49%など)が減少しない場合は、銀行Aに51を送ってから49を送っても問題ありません。銀行B、または交代して最後まで送付したいですか?一般的に

、最初greatest common divisorで割ることによって、あなたの比率を減らし、その後、いずれかの各バンクの順にメッセージの右の数を送ったり、同じ繰り返し周期に沿って一緒にすべての結果をシャッフルする見えます。

+0

が正確である必要があります。つまり、50-50,80-20,20-30-50です。私はカウンターが必要だと思う、問題はどのようにこれらのパーセンテージに基づいて "転送メッセージ"を割り当てるのですか?私は今、私のカウンタが今のところ12のメッセージを言うとすれば、バンクAの70%の割合が満たされているので、30%が満たされるまでシステムがBankBにメッセージを割り当てる必要がある。または、パーセントが50-50であっても、前のメッセージは銀行aに割り当てられ、次は銀行bに割り当てられる必要があります。 – andreas