You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 17:47:21