我想制作一个脚本来计算我需要达到4.95等级的“5”。
我创建了一个对象:
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;
}
此时我想在对象[“5”]中添加1,直到我的平均值大于或等于4.95,但我真的被卡住了。
我尝试了没有结果的循环,可能我写得不好。
答案 0 :(得分:1)
如果您执行公式,则会得到以下关系(使用代码使用的相同变量名称)
function getNeed(div, somma) {
return Math.ceil((4.95*div - somma) / 0.05);
}
据我所知,div
是发送的总票数,而somma
是所有得分的总和。
数学背后的方法
当前得分:somma / div
如果您添加5星的N
票,新分数将为:(somma + N * 5) / (div + N)
如果你希望它等于4.95,那么你做(somma + N * 5) / (div + N) = 4.95
,结果就是:
N = (4.95*div - somma) / 0.05
然后你必须像@dvsoukup评论那样将该值告知,因为你不能拥有非整数票数。这样,例如,如果计算出的N
的值为6.72,则结果为7。
答案 1 :(得分:0)
这是一个数学问题。 你用这种方式计算你的平均值:
( 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];