nixp.ru v3.0

26 мая 2017,
пятница,
02:53:39 MSK

DevOps с компанией «Флант»
anonymous написал 29 декабря 2004 года в 20:34 (399 просмотров) Ведет себя неопределенно; открыл 1814 темы в форуме, оставил 5575 комментариев на сайте.

Доброго времени суток.

Язык разработки: PHP4

Данный вопрос скорее к математикам, нежели программистам.

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

В чем проблема?

При построении графиков отображающих результаты голосования в процентах я получаю величины с большим к-вом знаков после запятой, например (32,34232233). Когда я пытаюсь округлить, допустим, при помощи функц. round(), ceil(), floor, то сумма всех рейтингов не составляет 100%, а получается больше или меньше?

Например:

1. 33.3333333%

2. 33.3333333%

3. 33.3333333%

Округляем, используем round();

1. 33%

2. 33%

3. 33%

= 99%

Как выйти из этой ситуации, я не знаю. Подходящей информации не нашел.

iliya

А в чем вопрос не понятно…

Тебе что нужно чтоб сумма после округления была 100, тогда вопрос «А зачем?».

Uncle Theodore

Дык! :-) А чего ты ожидал? Округляя, ты заменяешь числа в сумме другими числами, — ну и сумма становится другой. Если все округления — в сторону уменьшения, то и сумма становится меньше. А если все округлять в меньшую сторону, а последнее число, скажем, — в большую, то нарушится пропорциональное соотношение чисел. Так что, никуда не денешься. Можно, впрочем, держать меньше чисел после запятой — кто их складывать-то будет. :-) (и если говорить о математике, то и твои исходные числа в сумме дают 99.9999999, что не есть 100)

Типа (не помню, как это на PHP, а на С++ так):

double x = 1.234567890;

x = int(x * 100)/100.0;

сохранит тебе 2 знака после запятой (т.е. теперь x = 1.23)

Good Luck,

UT

anonymous

To: iliya

Окончательная сумма в 100% нужна для достоверности результатов.

Представь: два ответа.

1. 45%

2. 54%

Пользователь подумает, а где остальные процент(ы)?

To: UT

На сколько я понимаю для реализации того, что я хочу прийдется нарушать «нормальную» пропорциональность чисел. Мне просто очень интересно как это реализованно в уже написенный тестах?

Я предполагаю сделать так:

1. Подсчет процентного соотношения все вариантов

2. Корректировка суммы значений путем корректировки значения варианты с самым большим к-вом голосов.

Такой вариант сработает, но возможно есть варианты лучше, эффективней.

Я бы хотел реализовать расчет с минимальной корректировкой.

Возможно лучше корректировать значения всех вариантов одновременно?

Uncle Theodore
Guest
Возможно лучше корректировать значения всех вариантов одновременно?

Все корректировать не получится, как очевидно из твоего же примера с 1/3 на каждый из трех показателей. В сущности, можно один показатель не высчитывать вообще, а отнимать от ста сумму всех остальных показателей. Типа

Где обедал воробей?

a) В зоопарке x%

b) У зверей y%

c) Другое (100 — x — y)%

Тогда сумма всегда будет 100. Хотя, если «синтетическое» поле — значимое, то может получиться конфуз

Пол Вашего ребенка

а) Мужской 1 голос 33%

б) Женский 1 голос 33%

в) Вырастет — само решит 1 голос 34%

В общем, так вот оно…

Good Luck,

UT

anonymous

Спасибо UT за помощь.

Поздравляю nixp и все его учасников, а также Дмитрия Шурупова с наступающими новогодними праздниками.

Всем удачи и успешной реализации все своих планов. Пусть nixp станет еще лучше в новом году, потому как есть немного мест в интернете, где возможно получить ответ на вопрос и пообщаться с хорошими людьми.

Еще раз всех с новым годом. Guest aka Nuclear.