今天我們討論一個數學問題“加權平均法”。
在數據分析、考試成績計算、統計學和金融等場景中,經常會用到 加權平均(Weighted Average) 算法。相比簡單平均數,加權平均數能根據不同數據的重要程度(權重)計算更準確的結果。
本文將一步步實現一個通用的 C# 加權平均數計算方法,附帶完整示例代碼,并解析每一處實現細節(jié),幫助我們舉一反三,靈活運用在實際項目中。
什么是加權平均?

加權平均數公式是:
其中:
C# 實現思路
核心思路:
完整示例代碼
下面是使用 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> { 85, 92, 78 };
List<double> weights = new List<double> { 0.3, 0.5, 0.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
方法: - ? 用循環(huán)累加
值 * 權重
,同時累加權重之和。
- ?
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;
}
這里用到了:
適用場景舉例
總結
本次內容涵蓋以下關鍵點:
歡迎關注,我們后面繼續(xù)研究【移動加權平均算法】
參考內容
百科-加權平均值
閱讀原文:原文鏈接
該文章在 2025/7/18 10:45:53 編輯過