Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Не верно считает (https://javascript.ru/forum/css-html/62245-ne-verno-schitaet.html)

eridan 01.04.2016 10:41

Не верно считает
 
Здравствуйте, не получается получить правильное число.

Дано:
всего сыграно боев: all_b = 993
из них побед: pobed = 519

Нужно получить сколько победных боев без поражений еще нужно сыграть что б процент побед поднялся.

Использую следующую формулу:

proc = pobed / all_b * 100;          /* Вычисляю реальный процент побед */

n_proc = Math.ceil(proc);             /* Ближайшее целое большее процента побед */

n = (all_b * n_proc) / proc - all_b; /* Вычисляю сколько еще боев сыграть */


Трабл заключается в следующем. Не округляя ничего получаю:

proc = 52.26586102719033
n_proc = 53
n = 13.947919075144455

Логично предположить, что если сыграть еще 14 боев - процент будет больше 53, но
подставив в эту же формулу 14:

всего сыграно боев: all_b = 1007
из них побед: pobed = 533

выходят следующие значения:

proc = 52.92949354518372
n_proc = 53
n = 1.341407129455888

Вопрос, почему процент не поднялся, и как с этим бороться. Извините если не в тему и не по адресу.

eridan 01.04.2016 10:56

При большом количестве боев этот процент даст огромное количество победных боев, нужно более точное вычисление

destus 01.04.2016 11:12

Цитата:

Вопрос, почему процент не поднялся, и как с этим бороться
что вы имеет ввиду?
было 52.26586102719033
стало 52.92949354518372

eridan 01.04.2016 11:14

Цитата:

Сообщение от destus (Сообщение 412670)
что вы имеет ввиду?
было 52.26586102719033
стало 52.92949354518372

Совершенно верно, должно быть больше или равно 53, ведь в формуле используется именно 53

рони 01.04.2016 11:26

eridan,
function next(b, c) {
    for (var d = c / b * 100 | 1, a = 1; a++;)
        if (((c + a) / (b + a) * 100 | 0) >= d) return a
};
var all_b = 993, pobed = 519,n =  next(all_b, pobed);
alert(n)

eridan 01.04.2016 11:33

Цитата:

Сообщение от рони (Сообщение 412672)
eridan,
function next(b, c) {
    for (var d = c / b * 100 | 1, a = 1; a++;)
        if (((c + a) / (b + a) * 100 | 0) >= d) return a
};
var all_b = 993, pobed = 519,n =  next(all_b, pobed);
alert(n)

Да спасибо, пока шло обсуждение сам набросал небольшой цикл,

for ( n = 1; proc < n_proc; n++ ) {
			proc = ( pobed + n ) / ( all_b + n ) * 100;
		}


думал обойтись без него, тему можно закрывать, спасибо.

P.S. Ваша формула работает точнее спасибо


Часовой пояс GMT +3, время: 10:26.