У меня проблема с округлением результатов опроса до 100% - PullRequest
2 голосов
/ 10 июля 2009

Я разрабатываю опрос, используя ruby, но ответ, который я получаю, является неправильным, я ищу ответы, которые приведут к 100%, но мои ответы иногда бывают 101% или 99%, и я уверен, что округление из моих поплавков, но я просто могу сделать их правильно, потому что без округления ответы очень длинные поплавки. мой код вычисления результатов и их отображения -

> 
   @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

Ответы [ 2 ]

9 голосов
/ 10 июля 2009

Я думаю, проблема в том, как округление работает в математике. Например, если у вас было 3 варианта с одним голосом, округление до ближайшего процента дало бы вам 33%, 33%, 33%, что, конечно, добавляет до 99%. Что совершенно правильно.

Невозможно сделать так, чтобы оно суммировалось с точностью до 100% без фальсификации данных (то есть в вышеупомянутом случае вы могли бы искусственно дать один вариант 34%, но это не отражало бы фактических голосов.)

Мое решение: показывать проценты с точностью до 1 знака после запятой, и не беспокойтесь о том, что оно составляет в точности 100%

1 голос
/ 10 июля 2009

Это в значительной степени происходит каждый раз, когда вы округляете относительные проценты. На самом деле это не так неправильно, как приблизительный. Вы можете довести итоговое значение до 100, и лучший способ, вероятно, - это посмотреть, что вам нужно отрегулировать, и вычесть это количество из чисел, которые были наиболее далеки от того, к чему они были округлены, но вы все равно рискуете исказить результаты даже больше, чем вы уже делаете.

Возможно, вы захотите отобразить ваши проценты с точностью до одного знака после запятой, например 0,6% вместо 1%, чтобы вообще уменьшить это искажение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...