jQuery加权成绩计算:请求检查并修正核心计算代码行
加权成绩计算代码问题检查
需要编写代码根据以下公式计算权重(weight)与成绩(grade)输入框的加权成绩:
加权成绩 = w1×g1 + w2×g2 + w3×g3 示例:30%×80 + 50%×90 + 20%×72 = 83.4
现有jQuery代码如下:
function total(){ var grade = 0; var weight = 0; $("[name='grade']").each(function() { grade += Number(this.value); }); $("[name='weight']").each(function() { weight += Number(this.value); }); $(".results").text((weight * grade + weight * grade)/weight); } $("[name='grade'],[name='weight']").on("keyup", total); total();
代码问题分析与修改建议
你当前的计算行$(".results").text((weight * grade + weight * grade)/weight);完全错误,必须修改,核心问题是逻辑完全不符合加权成绩的计算规则:
- 现有代码先把所有成绩、所有权重分别求和,再做无意义的乘除运算,这和「每组权重×对应成绩后累加」的正确逻辑完全相悖。
- 额外注意:如果权重输入是百分比形式(比如输入30代表30%),还需要转换为小数再计算,否则结果会放大100倍。
正确实现代码
function total(){ var weightedTotal = 0; var totalWeight = 0; // 按组遍历对应位置的成绩和权重输入框 $("[name='grade']").each(function(index) { // 处理空值或非数字输入,避免NaN错误 var gradeVal = Number(this.value) || 0; var weightVal = Number($("[name='weight']").eq(index).val()) || 0; // 若权重是百分比(如输入30代表30%),转为小数计算 weightedTotal += gradeVal * (weightVal / 100); totalWeight += weightVal; }); // 可选:校验权重总和是否为100,避免无效输入 if (totalWeight !== 100 && totalWeight !== 0) { $(".results").text("权重总和需为100%"); return; } // 保留一位小数,匹配示例输出格式 $(".results").text(weightedTotal.toFixed(1)); } $("[name='grade'],[name='weight']").on("keyup", total); total();
关键修改点
- 不再单独累加成绩和权重总和,改为按组对应计算权重×成绩后累加
- 增加空值/非数字输入的容错处理
- 新增权重总和校验(可选),确保输入逻辑合理
- 结果保留一位小数,和示例输出一致
内容的提问来源于stack exchange,提问作者Bishoy A
相关产品推荐
相关产品推荐

