#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
в настоящее время является aString
, а не aNumber
после использования.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];