2009-07-10 11 views
2

私はルビーを使用して投票を開発していますが、私が得た答えは間違っていますが、私は答えが100%時には101%か99%です。私はフロートの四捨五入ですが、答えを丸めずに非常に長い浮動小数点があるので、私はちょうどそれらを得ることができます。結果を計算して結果を表示する私のコードは私は投票結果を100%に丸める問題があります

> 
    @general_poll_graph_data = generalsortedoptions.collect do |o| 
      option = [keys[count],  (((o.poll_votes.count.to_f)/@general_poll.poll_votes.count.to_f)*100).round_to(1)] 
      count = count + 1 
      option 
    end 

答えて

9

私は問題が数学でどのように機能するかと思います。たとえば、1つの投票で3つのオプションがある場合、最も近いパーセンテージに丸めれば33%、33%、33%が得られ、もちろん99%になります。どちらが正しいですか。

それは(つまり、上記の場合には、あなたが人為的に一つの選択肢に34%を与えることができるが、これは実際の票の代表ではありません。)それはデータをfudgingせずに、正確に100%まで追加することが可能ではありません

私の解決策:小数点第1位までのパーセンテージを表示し、正確に100%まで加算することを心配しないでください。

+0

私は実際に同じことをすることを考えていました –

1

これは、おおよそそれほど間違っているわけではありません。合計を100に強制することができます。最良の方法は、調整する必要があるものを見て、丸められたものから最も遠い数字からその量を取ることを検討することですが、それでも歪みのリスクを冒しますあなたがすでにやっている以上の結果が得られます。

パーセンテージを小数点以下1桁(たとえば、1%ではなく0.6%)に表示して、一般的にその歪みを減らすことを検討してください。

関連する問題