Javascript - 计算缺失的5颗星以达到所需的评级

时间:2016-10-13 19:42:37

标签: javascript rating-system

我想制作一个脚本来计算我需要达到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,但我真的被卡住了。

我尝试了没有结果的循环,可能我写得不好。

2 个答案:

答案 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];