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];
我想制作一个脚本来计算我需要多少个“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.
这是一道数学题。 您以这种方式计算您的平均值:
( 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];