LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

使用 C# 实现加权平均算法(含完整代码与实现解析)

admin
2025年7月17日 22:4 本文热度 14

今天我们讨论一个数学问题“加权平均法”。

在数据分析、考试成绩计算、统计学和金融等场景中,经常会用到 加权平均(Weighted Average) 算法。相比简单平均数,加权平均数能根据不同数据的重要程度(权重)计算更准确的结果。

本文将一步步实现一个通用的 C# 加权平均数计算方法,附带完整示例代码,并解析每一处实现细节,帮助我们举一反三,灵活运用在实际项目中。

什么是加权平均?



简单平均数公式是:

加权平均数公式是:

其中:

  • •  是第 i 个数据值
  • •  是对应的权重
  • •  是权重之和

C# 实现思路

核心思路:

  1. 1. 输入两组数据:
    • • 一组是待计算的值(如成绩)
    • • 一组是对应的权重(如每门课占总成绩的比例)
  2. 2. 验证两组数据长度一致。
  3. 3. 计算「值 * 权重」的加总。
  4. 4. 计算权重的总和。
  5. 5. 用加总除以权重总和,得到加权平均数。

完整示例代码

下面是使用 C# 10 编写的示例,兼容 .NET 6 及以上:

using System;
using System.Collections.Generic;
using System.Linq;

namespaceWeightedAverageDemo
{
    classProgram
    {
        static void Main(string[] args)
        {
            // 示例:3 门课程成绩及其权重
            List<double> scores = new List<double> { 859278 };
            List<double> weights = new List<double> { 0.30.50.2 };

            double weightedAverage = CalculateWeightedAverage(scores, weights);

            Console.WriteLine($"加权平均成绩:{weightedAverage:F2}");
        }

        /// <summary>
        /// 计算加权平均数
        /// </summary>
        /// <param name="values">值集合</param>
        /// <param name="weights">权重集合</param>
        /// <returns>加权平均数</returns>
        static double CalculateWeightedAverage(List<double> values, List<double> weights)
        {
            if (values == null || weights == null)
                thrownew ArgumentNullException("values 和 weights 不能为空。");

            if (values.Count != weights.Count)
                thrownew ArgumentException("值集合和权重集合的长度必须一致。");

            double weightedSum = 0;
            double weightSum = 0;

            for (int i = 0; i < values.Count; i++)
            {
                weightedSum += values[i] * weights[i];
                weightSum += weights[i];
            }

            if (weightSum == 0)
                thrownew DivideByZeroException("权重之和不能为零。");

            return weightedSum / weightSum;
        }
    }
}

代码解析

  • • List<double> scores 和 List<double> weights:用于存放数据值和对应权重。
  • • CalculateWeightedAverage 方法:
    • • 验证输入:保证两个列表长度一致,且不为空。
    • • 用循环累加 值 * 权重,同时累加权重之和。
    • • 除以权重之和得到结果。
  • • Console.WriteLine 用 :F2 保留两位小数输出。

---

扩展:使用 LINQ 重写

如果你想用更函数式的写法,也可以用 LINQ:

static double CalculateWeightedAverageLinq(List<double> values, List<double> weights)
{
    if (values == null || weights == null)
        thrownew ArgumentNullException();

    if (values.Count != weights.Count)
        thrownew ArgumentException("值和权重长度必须一致。");

    double weightedSum = values.Zip(weights, (v, w) => v * w).Sum();
    double weightSum = weights.Sum();

    if (weightSum == 0)
        thrownew DivideByZeroException();

    return weightedSum / weightSum;
}

这里用到了:

  • • Zip:把两个列表一一配对。
  • • Sum:求和。

适用场景举例

  • • 计算期末总成绩(不同科目占比不同)
  • • 统计某产品线不同产品对总销售额的贡献
  • • 计算金融投资组合收益率

总结

本次内容涵盖以下关键点:

  • • 加权平均数的概念解析与计算公式
  • • C# 语言的具体实现方案
  • • 采用 LINQ 的简化编码方式
  • • 实际应用场景分析

欢迎关注,我们后面继续研究【移动加权平均算法】

参考内容

百科-加权平均值

阅读原文:原文链接


该文章在 2025/7/18 10:45:53 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved