Javascript — Подсчитайте недостающие 5 звезд для достижения желаемого рейтинга

#javascript #rating-system

#javascript #рейтинг-система

Вопрос:

Я хотел бы создать скрипт, который вычисляет, сколько «5» мне нужно, чтобы достичь рейтинга 4,95.

Я создал объект:

 var obMed = {
   5: 0,
   4: 0,
   3: 0,
   2: 0,
   1: 0
 };
 

Я получил эту функцию для обновления предыдущего объекта с моим рейтингом

 function upOB(a,b,c,d,e) {
    obMed["5"] = a;
    obMed["4"] = b;
    obMed["3"] = c;
    obMed["2"] = d;
    obMed["1"] = e;
    return obMed;
}
 

И эта функция для получения значения рейтинга

 function med(obj) {
    div = obj["5"]   obj["4"]   obj["3"]   obj["2"]   obj["1"];
    somma = (obj["5"] * 5)   (obj["4"] * 4)   (obj["3"] * 3)   (obj["2"] * 2)   (obj["1"] * 1);
    media = (somma/div).toFixed(2);
    return media;
} 
 

На данный момент я хотел бы добавить 1 к объекту [«5»], пока мое среднее значение не будет больше или равно 4,95, но я действительно застрял.

Я пробовал циклы безрезультатно, вероятно, я написал их плохо.

Комментарии:

1. Вы должны показать свои попытки использовать цикл; это поможет объяснить, где вы ошибаетесь.

2. это просто простая математика. вам не нужен цикл. вам просто нужно выяснить, какое «общее количество баллов / количество оценок = 5.0» вам нужно, учитывая, что ваш текущий итог / число = 4.95

3. Обратите внимание, media в настоящее время является a String , а не a Number после использования .toFixed()

Ответ №1:

Если вы выполните уравнения, вы получите следующее соотношение (используя те же имена переменных, которые использует ваш код)

 function getNeed(div, somma) {
  return Math.ceil((4.95*div - somma) / 0.05);
}
 

Насколько я понимаю, div это общее количество отправленных голосов и somma сумма всех баллов.

Математика, лежащая в основе метода

текущая оценка: somma / div
если вы добавите N голоса 5 звезд, новая оценка будет: (somma N * 5) / (div N)
Если вы хотите, чтобы это было равно 4,95, тогда вы делаете (somma N * 5) / (div N) = 4.95 , и в результате получается:
N = (4.95*div - somma) / 0.05

Затем вам нужно будет указать это значение, как прокомментировал @dvsoukup, поскольку у вас не может быть нецелочисленного количества голосов. Таким образом, например, вы получите в результате 7, если вычисленное значение N равно 6,72.

Комментарии:

1. возможно, вам придется взять потолок результата … в результате, скажем, 6,72 будет означать, что вам нужно «7» больше пяти звезд… вы не можете получить половину пяти звезд, если не выберете 2 или 3 звезды. Но OP конкретно запрашивает, сколько именно «5» звездочных оценок необходимо

2. Вы совершенно правы. Я обновлю ответ с вашим комментарием

3. Это верно, даже я попробовал математику. j = (( div * 4.95 ) — сомма) / 0.05

Ответ №2:

Это математическая задача. Таким образом вы вычисляете свое среднее значение:

( k1*1 k2*2 k3*3 k4*4 k5*5 ) / (k1 k2 k3 k4 k5)

Где k 1..5 — количество голосов. Вы хотите знать количество j голосов, чтобы достичь 4,95.

Ваша позиция:

( k1*1 k2*2 k3*3 k4*4 (k5 j)*5 ) / (k1 k2 k3 k4 k5 j) = 4.95

С некоторым математическим отрывком, который я вам сохраняю, ваш результат:

 j = 79*k1   59*k2   39*k3   19*k4 - k5 
 

Примените эту формулу, и вы получите желаемое число

Возвращаясь к javascript, вы должны учитывать:

 var missingFives = 79*obMed[1] 59*obMed[2] 39*obMed[3] 19*obMed[4]-obMed[5];