Javascript - 计算缺少的 5 颗星以达到所需评分

Javascript - Calculate missing 5 stars to reach desired rating

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

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

如果您执行方程式,您会得到以下关系(使用您的代码使用的相同变量名称)

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 评论的那样将该值设为 ceil,因为您不能拥有非整数的选票。这样,例如,如果计算出的 N 的值为 6.72.

,则结果将是 7

这是一道数学题。 您以这种方式计算您的平均值:

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

其中k1..5是票数。 您想知道达到 4.95.

的票数 j

您的职位是:

( 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];