整数のアイテムのリストがあるとします:
USA: 3 people
Australia: 2 people
Germany: 2 people
リスト全体の合計に対する各値の割合を計算すると、次のようになります。
USA: 3/(3+2+2)*100 = 42.857...%
Australia: 2/(3+2+2)*100 = 28.571...%
Germany: 2/(3+2+2)*100 = 28.571...%
丸めると、次のようになります。
USA: 43%
Australia: 29%
Germany: 29%
合計43 + 29 + 29 = 101は100ではなく、ソフトウェアのユーザーにとっては少し奇妙に見えます。この問題をどのように解決しますか?
結果がユーザーにとって少し奇妙に見えることを懸念している場合は、パーセンテージが四捨五入されており、合計が100%にならない可能性があることを指摘する結果について脚注を付けます。丸めによってこの動作が発生する場合にのみ、プログラムでメッセージを表示できます。
USA percentage: 43
Australia percentage: 29
Germany percentage: 29
*Percentages may not total 100 due to rounding
Rubyを使用しているので、 rational 数値を使用することをお勧めします。このようにして、必要なときに精度を失うことはありません。脚注の代わりに、パーセンテージを次のように隣に有理数を表示する場合があります。
USA percentage: 43 (3/7)
Australia percentage: 29 (2/7)
Germany percentage: 29 (2/7)
小数点以下の桁数を増やして、丸め誤差の深刻度を下げます。
USA percentage: 42.9
Australia percentage: 28.6
Germany percentage: 28.6
これにより、101ではなく100.1になります。
選挙で使用される最大剰余法を参照できます: Wikipedia:最大剰余法
あなたの場合、あなたは持っています
USA: 42.857...
Australia: 28.571...
Germany: 28.571...
整数部分を取ると、
USA: 42
Australia: 28
Germany: 28
合計で98になり、さらに2つ取ります。今、あなたは小数部を見て、それは
USA: 0.857...
Australia: 0.571...
Germany: 0.571...
そして、合計が100に達するまで最大のものを取ります。米国を取る場合、合計は99になり、もう1つ取りたいと思います。ここで問題が発生します。オーストラリアとドイツの間に0.571の同点が残っているので、両方を取った場合、合計は101になります。したがって、次の2つの方法から選択できます。
(a)合計を100にしたい場合は、オーストラリアのみを使用し、それ以上は使用しないでください。
USA: 43
Australia: 29
Germany: 28
(b)オーストラリアとドイツが同点であるという事実を尊重したい場合は、その時点で停止します。
USA: 43
Australia: 28
Germany: 28
四捨五入のため、コンポーネントが合計に合わない場合があります。統計レポートの標準。
チートは、次の表、レポート、または付録であなたを噛むために戻ってきます。変更を追跡することはできません。この種のレポートを読まない人にとっては面白そうだ。
そうそう。丸め誤差ではありません。
最後の丸められた結果以外のすべての丸められた結果を合計し、最後の1つに100の値を与えることにより、少し「チート」することができます-以前の合計...
この場合、次のようになります。
USA = 43
Aus = 29
Ger = 28 (100 - (43 + 29))
しかし、それは汚いトリックにすぎません...私がドイツのパーセンテージがオーストラリアのパーセンテージよりも低いことを示しているように見えるので、マットによって与えられたより正直で正確な解決策に従うべきです。