生活工具 · 教育升学

学分计算

加权 GPA/学分换算

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 56 次使用
加权均分 = Σ(成绩×学分) ÷ Σ学分
绩点制式
成绩按所选制式映射绩点 · 切换即重算
课程名(可选)学分成绩类别绩点
加权平均分
/ 100
参与 门 · 不及格
加权 GPA ·
/ 4.0
绩点加权和
总修读学分
学分
已通过(≥60) · 未通过
类别统计credits by category · 已通过学分
毕业进度graduation credit progress
0%
已完成
已修(已通过)
还差
辅助统计more numbers
学分加权和 Σ(成绩×学分)
简单平均分(不加权)
最高 / 最低分
课程通过率
学时换算class hours ↔ credits
常见 16 / 17 / 18 学时 = 1 学分,按校历调整
换算规则:学分 = 学时 ÷ 每学分学时数;编辑任一框即联动。
就绪 · 录入学分与成绩即自动计算
第一节

关于本工具

About

学期末算加权 GPA,对着教务系统的成绩单,一门一门手动乘学分、求和、再除以总学分——多算一遍就多一次对不上号的风险。这个工具把过程拆成几步:输入课程学分和成绩,自动按加权公式算出平均绩点,支持 4.0/5.0 等常见满分制切换。所有运算在浏览器本地完成,成绩数据不会上传服务器,适合期末核算、留学申请前自算对照。

使用场景

保研边缘算排名

大三下学期期末,绩点卡在 3.48,保研线往年是 3.5。辅导员说只看加权平均分,不看算术平均。手算需要把每门课的学分和成绩逐个乘加再除以总学分,漏一门就偏。用这个工具把所有课程成绩和学分输入,自动按加权公式出结果,省去反复核对 Excel 的精力,确认这学期需要把某门 4 学分专业课考到 90 分以上才能过线。

海外申请换算 GPA

学生申请美国研究生,学校成绩单是百分制,但目标院校要求按 4.0 标准提交。不同算法(标准 4.0、改进型、WES 等)结果能差 0.3-0.5。用这个工具分别选择几种常见换算标准,输入原始百分制成绩和对应学分,立即看到不同算法下的 GPA 值,判断哪种算法对自己最有利,再决定是否走 WES 认证。

转专业学分认定

从机械工程转到计算机科学,原专业修过的《高等数学 A》(5 学分)和《C 语言基础》(3 学分)能否抵计算机培养方案里的同名课程?需要按新专业的学分权重重新计算已修课程的加权平均分,看是否达到免修标准。用工具把原成绩和新学分值代入,几分钟算出加权结果,直接截图发给教务处,不用等他们人工算一周。

双学位选课策略

主修金融 GPA 3.6,辅修计算机 GPA 3.2,但学校规定辅修课程的平均分必须达到 3.3 才能拿学位证。剩下 4 门辅修课,每门学分不同(2-4 学分),需要算出现在加权平均分,再倒推每门课至少考多少分才能拉过线。用工具输入已有成绩和学分,再尝试调整未来课程的成绩假设,快速找到最低达标组合。

重修后刷新绩点

大二挂了一门 6 学分的《大学物理》,补考 60 分飘过,但成绩单上只记 60 分,拉低了总绩点。大三决定重修,学校政策是取最高成绩覆盖,但加权重新计算时总学分不变。用工具把原成绩替换为新成绩,学分不变,立刻看到总绩点能提升多少,评估重修这门课的时间成本是否值得。

毕业前算学位绩点

大四下学期,教务通知毕业审核只看学位课(专业必修)的加权平均绩点,通识课不算。手头有 4 年 60 多门课的成绩单,需要挑出 20 门学位课,按各自学分加权算出最终值。用工具只输入学位课的成绩和学分,排除其他课程干扰,几分钟得到精确结果,确认是否达到学校 2.0 的学位授予线。

对比矩阵

维度本工具(全宝工具站)Excel 手动计算在线 GPA 计算器(典型站)
计算方式自动按加权 GPA / 学分换算公式输出需手动输入公式(如 SUMPRODUCT/SUM)并逐行核对提供固定 GPA 算法,部分支持自定义权重
输入方式直接填入课程学分与成绩,支持批量需逐格填写,跨表格复制易出错通常逐条添加,批量导入少
隐私纯浏览器端计算,无数据上传文件存本地,但共享或云同步时可能泄露数据上传至服务器,有隐私风险
速度即时出结果,无网络延迟公式计算快,但手动输入与核对耗时依赖服务器响应,网络慢时延迟
离线可用完全离线可用,无需网络完全离线需联网,断网无法使用
收费免费,无隐藏费用需 Office 许可证或订阅部分免费,高级功能/去广告需付费
算法灵活性支持加权 GPA 与学分换算,可自定义完全灵活,但需用户自己构建公式通常固定几种标准算法,自定义有限
第二节

使用指南

Getting Started

使用步骤

  1. 1在「课程名称」栏输入课程名(可选),在「学分」栏输入该课程学分(如 3.0),在「成绩」栏选择或输入百分制分数(如 85)或等级(如 B+)
  2. 2点击「添加课程」按钮,该行记录立即出现在下方列表中,并自动更新 GPA 与总学分预览
  3. 3重复添加所有课程后,页面顶部实时显示加权 GPA 值、总学分及换算后的 4.0/5.0 制分数
  4. 4如需修改某课程,点击该行右侧「编辑」图标直接调整数值,结果即时重算;点击「删除」图标移除该行
  5. 5点击「导出结果」按钮,将当前 GPA 与课程列表以 CSV 格式下载到本地,供存档或提交

输入输出示例

输入输出说明
课程1:高等数学(4学分,92分);课程2:大学英语(3学分,85分);课程3:程序设计(3学分,78分)加权 GPA:3.56(按标准4.0算法);总学分:10;加权平均分:85.8常规:典型多门课程加权计算,验证基础GPA换算逻辑
课程1:体育(1学分,60分);课程2:军事理论(2学分,61分);课程3:通识选修(2学分,62分)加权 GPA:1.33(按标准4.0算法);总学分:5;加权平均分:61.0边界:所有课程刚过及格线,GPA接近1.0,验证低分段换算精度
课程1:毕业设计(16学分,95分);课程2:专业实习(8学分,90分)加权 GPA:3.83(按标准4.0算法);总学分:24;加权平均分:93.3边界:高学分课程占主导,验证大权重课程对GPA的拉高效果
课程1:大学物理(4学分,100分);课程2:线性代数(3学分,100分);课程3:思政课(2学分,100分)加权 GPA:4.00(按标准4.0算法);总学分:9;加权平均分:100.0边界:满分场景,验证GPA上限是否为4.0
课程1:选修课(2学分,59分)加权 GPA:0.00(按标准4.0算法,59分对应绩点0);总学分:2;加权平均分:59.0易错:59分不及格,绩点为0,但平均分仍计算,避免误以为GPA与平均分线性对应
课程1:实验课(0.5学分,88分);课程2:实践课(0.5学分,92分)加权 GPA:3.50(按标准4.0算法);总学分:1.0;加权平均分:90.0易错:半学分课程处理,验证工具是否支持非整数学分输入
课程1:重修课(4学分,75分);课程2:原课程(4学分,60分,已覆盖)加权 GPA:2.50(按标准4.0算法,仅计入重修成绩);总学分:4;加权平均分:75.0易错:重修覆盖场景,工具需明确是否只取最高分或最新成绩,此处假设只取重修成绩

常见错误对照

1.百分制成绩直接当绩点输入

✗ 错误输入 85 分,期望直接得到 3.5 绩点
✓ 修复先查学校绩点对照表,将 85 分换算为 3.0(4.0 制)或 3.5(5.0 制)再输入

本工具计算的是加权平均绩点(GPA),输入字段要求的是每门课的绩点值(如 4.0、3.7),不是百分制原始分数。

2.学分单位不统一

✗ 错误一门课学分写 3,另一门写 1.5,但实际都是 1.5 学分的课
✓ 修复统一使用学校成绩单上的学分值,例如全部按 1.5、3、4 等标准学分输入

加权 GPA 的权重是学分,学分数值必须与学校教务系统一致。混合不同计量单位(如学时 vs 学分)会导致加权结果失真。

3.漏掉通识选修课

✗ 错误只输入专业课成绩,不输入体育、公选课等
✓ 修复将成绩单上所有课程(含必修、选修、实践)的绩点和学分全部录入

加权 GPA 是全部课程的总和除以总学分。漏掉任何一门课都会改变总学分和总绩点,导致 GPA 偏高或偏低。

4.绩点数值超出学校标准范围

✗ 错误输入 4.5(4.0 制下最高 4.0)
✓ 修复确认学校绩点制:4.0 制最高 4.0,5.0 制最高 5.0,输入对应范围内的值

各校绩点上限不同(常见 4.0、4.3、5.0)。超出上限的值会被工具视为非法输入,或导致计算结果无法反映真实水平。

5.挂科课程直接跳过不输入

✗ 错误挂科课程不录入,只算通过的课
✓ 修复挂科课程也录入,绩点按学校规定填 0(或补考后的新绩点)

加权 GPA 必须包含所有修读课程。挂科课程通常绩点为 0,但学分仍计入总学分。跳过会导致总学分减少、GPA 虚高。

6.混淆加权平均分与加权平均绩点

✗ 错误输入百分制成绩后,直接看输出结果当作 GPA
✓ 修复明确本工具输出的是加权平均绩点(GPA),不是加权平均分(百分制)

加权平均分 = Σ(成绩×学分) / Σ学分;加权平均绩点 = Σ(绩点×学分) / Σ学分。两者数值不同,用途也不同(奖学金看平均分,保研看 GPA)。

7.绩点四舍五入后输入

✗ 错误实际绩点 3.666,输入 3.7
✓ 修复保留原始绩点小数位(如 3.666),不提前四舍五入

加权计算过程中,提前四舍五入会累积误差。最终结果由工具统一按设定精度输出,中间值应保持原始精度。

第三节

工作原理

How It Works

核心公式

GPA = Σ(课程学分 × 课程绩点) ÷ Σ(课程学分)

变量说明

  • 课程学分每门课的学分值,如 3.0
  • 课程绩点百分制或等级制转换后的绩点

示例

某学期三门课:高数(4学分, 绩点3.3)、英语(3学分, 绩点2.7)、体育(1学分, 绩点4.0)。加权和 = 4×3.3 + 3×2.7 + 1×4.0 = 13.2 + 8.1 + 4.0 = 25.3;总学分 = 4+3+1 = 8;GPA = 25.3 ÷ 8 ≈ 3.16。

课程成绩 对应学分 成绩 → 绩点 (查表 / 公式) 加权求和 加权 GPA 总学分换算 所有计算在浏览器内完成,数据不上传
用户输入 本地处理 输出结果
第四节

开发者集成

For Developers

6 种主流语言实现,复制即用:

def weighted_gpa(grades_credits): """ 计算加权 GPA(4.0 制) :param grades_credits: [(分数, 学分), ...] :return: (加权 GPA, 总学分) """ if not grades_credits: return 0.0, 0 # 百分制转 4.0 绩点(通用分段) def to_gpa(score): if score >= 90: return 4.0 elif score >= 80: return 3.0 elif score >= 70: return 2.0 elif score >= 60: return 1.0 else: return 0.0 total_points = sum(to_gpa(s) * c for s, c in grades_credits) total_credits = sum(c for _, c in grades_credits) return round(total_points / total_credits, 2), total_credits # 示例:三门课 scores = [(85, 4), (92, 3), (68, 2)] gpa, credits = weighted_gpa(scores) print(f"加权 GPA: {gpa},总学分: {credits}") # 输出: 加权 GPA: 2.89,总学分: 9
function weightedGPA(gradesCredits) { if (gradesCredits.length === 0) return { gpa: 0, totalCredits: 0 }; const toGPA = (score) => { if (score >= 90) return 4.0; if (score >= 80) return 3.0; if (score >= 70) return 2.0; if (score >= 60) return 1.0; return 0.0; }; let totalPoints = 0, totalCredits = 0; for (const [score, credit] of gradesCredits) { totalPoints += toGPA(score) * credit; totalCredits += credit; } return { gpa: +(totalPoints / totalCredits).toFixed(2), totalCredits }; } // 示例 console.log(weightedGPA([[85, 4], [92, 3], [68, 2]])); // 输出: { gpa: 2.89, totalCredits: 9 }
package main import "fmt" func toGPA(score float64) float64 { switch { case score >= 90: return 4.0 case score >= 80: return 3.0 case score >= 70: return 2.0 case score >= 60: return 1.0 default: return 0.0 } } func weightedGPA(gradesCredits [][2]float64) (float64, float64) { if len(gradesCredits) == 0 { return 0, 0 } var totalPoints, totalCredits float64 for _, gc := range gradesCredits { score, credit := gc[0], gc[1] totalPoints += toGPA(score) * credit totalCredits += credit } return totalPoints / totalCredits, totalCredits } func main() { scores := [][2]float64{{85, 4}, {92, 3}, {68, 2}} gpa, credits := weightedGPA(scores) fmt.Printf("加权 GPA: %.2f,总学分: %.0f\n", gpa, credits) // 输出: 加权 GPA: 2.89,总学分: 9 }
interface GradeCredit { score: number; credit: number; } function weightedGPA(grades: GradeCredit[]): { gpa: number; totalCredits: number } { if (grades.length === 0) return { gpa: 0, totalCredits: 0 }; const toGPA = (score: number): number => { if (score >= 90) return 4.0; if (score >= 80) return 3.0; if (score >= 70) return 2.0; if (score >= 60) return 1.0; return 0.0; }; let totalPoints = 0, totalCredits = 0; for (const { score, credit } of grades) { totalPoints += toGPA(score) * credit; totalCredits += credit; } return { gpa: parseFloat((totalPoints / totalCredits).toFixed(2)), totalCredits }; } // 示例 console.log(weightedGPA([ { score: 85, credit: 4 }, { score: 92, credit: 3 }, { score: 68, credit: 2 } ])); // 输出: { gpa: 2.89, totalCredits: 9 }
import java.util.*; public class WeightedGPA { private static double toGPA(double score) { if (score >= 90) return 4.0; if (score >= 80) return 3.0; if (score >= 70) return 2.0; if (score >= 60) return 1.0; return 0.0; } public static double[] weightedGPA(List<double[]> gradesCredits) { if (gradesCredits.isEmpty()) return new double[]{0, 0}; double totalPoints = 0, totalCredits = 0; for (double[] gc : gradesCredits) { double score = gc[0], credit = gc[1]; totalPoints += toGPA(score) * credit; totalCredits += credit; } double gpa = Math.round((totalPoints / totalCredits) * 100.0) / 100.0; return new double[]{gpa, totalCredits}; } public static void main(String[] args) { List<double[]> scores = Arrays.asList( new double[]{85, 4}, new double[]{92, 3}, new double[]{68, 2} ); double[] result = weightedGPA(scores); System.out.printf("加权 GPA: %.2f,总学分: %.0f%n", result[0], result[1]); // 输出: 加权 GPA: 2.89,总学分: 9 } }
<?php function weightedGPA(array $gradesCredits): array { if (empty($gradesCredits)) return ['gpa' => 0, 'totalCredits' => 0]; $toGPA = function($score) { if ($score >= 90) return 4.0; if ($score >= 80) return 3.0; if ($score >= 70) return 2.0; if ($score >= 60) return 1.0; return 0.0; }; $totalPoints = 0; $totalCredits = 0; foreach ($gradesCredits as [$score, $credit]) { $totalPoints += $toGPA($score) * $credit; $totalCredits += $credit; } return ['gpa' => round($totalPoints / $totalCredits, 2), 'totalCredits' => $totalCredits]; } // 示例 $scores = [[85, 4], [92, 3], [68, 2]]; $result = weightedGPA($scores); echo "加权 GPA: {$result['gpa']},总学分: {$result['totalCredits']}\n"; // 输出: 加权 GPA: 2.89,总学分: 9 ?>
第五节

常见问题

Q & A
我成绩单上有百分制也有五级制,能一起算加权 GPA 吗?

可以。本工具在输入时允许每门课单独选择成绩类型。百分制直接填分数,系统会自动按 90-100=4.0、85-89=3.7 等常用分段换算;五级制选对应等级(优/良/中/及格/不及格),工具会映射到绩点。注意:不同学校的分段标准可能略有差异,结果区会显示当前使用的换算表,建议先核对一下是否符合本校规定。

为什么我算出来的 GPA 跟学校教务系统的不一样?

差异通常来自两个地方。一是换算标准:有的学校用 90=4.0 的北大算法,有的用 85=4.0 的改进算法,本工具默认采用国内最通用的 90-100=4.0 分段,但结果页提供了「算法切换」按钮,你可以选北大 4.0、标准 4.0 或自定义权重。二是学分权重:确认每门课的学分是否填对了,部分教务系统会把实验课单独算 0.5 学分。

最多能加多少门课?有数量限制吗?

本工具完全在浏览器端运行,不设硬性数量上限。实测添加 200 门课(含输入、切换算法、导出结果)响应仍流畅。如果超过 300 门,页面渲染和计算会稍有延迟,但依然可用。注意:大量课程建议分批核对,避免误填。所有数据只存本地,刷新或关闭页面即清空,不会上传服务器。

学分换算是什么意思?我只要算 GPA 也要填学分吗?

学分换算指的是将不同学分制的学分值统一。比如你原学校一门课是 3 学分,另一所交换学校同课程是 4 学分,工具可以按目标学校的标准重新折算学分。如果只是算加权 GPA,必须填学分——因为 GPA 公式就是 Σ(绩点×学分) ÷ Σ学分,不填学分无法计算。每门课右侧的学分输入框默认是 1,请务必改成实际学分。

没网的时候能用吗?会不会把成绩单上传到服务器?

本工具是纯前端实现,所有计算都在你浏览器内完成,数据不会离开设备。加载一次页面后,即使断网也能继续使用(前提是页面已完全打开)。关闭页面或清除浏览器缓存后数据自动消失,不留痕迹。适合在机房、图书馆或信号不好的地方离线算 GPA。

我有一门课重修了,旧的成绩要删除还是保留?怎么算才准?

国内多数学校重修后只计最高成绩,旧成绩覆盖或不计入 GPA。建议:如果你学校是覆盖制,只输入重修后的最终成绩和学分即可;如果是取两次平均或都算,需按学校规则分别录入。本工具不自动判断重修策略,请自行按学校规定选择录入方式。结果区底部有「备注栏」可手动记录重修情况。

我想算出国用的 4.0 制 GPA,但学校是五分制,怎么换算?

五分制(如 5.0 满分)转 4.0 制没有通用官方公式,不同目标学校要求不同。本工具提供两种常见转换:一是线性映射(5 分×0.8=4 分),二是按等级分段(5=4.0、4=3.0 等)。结果页会同时显示两种算法的结果,并标注差值。建议先查目标学校官网的换算说明,选择最接近的算法。

为什么我填了 59 分,绩点显示为 0?是不是工具出 bug 了?

不是 bug。国内绝大多数 GPA 算法规定百分制低于 60 分为不及格,绩点为 0。本工具默认采用此规则:59 分对应绩点 0.0,且该门课的学分仍然计入总学分(即分母),所以 GPA 会被拉低。如果学校有特殊政策(如补考通过后按 60 分计),请手动将成绩改为 60 分再算。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

选择 打开 +新窗口 esc关闭