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

C#实现:基于任意Y=f(X)公式将年度数值拆分至月度

实现思路与C#代码示例

1. 核心逻辑拆解

要自动完成年度100%的月度曲线拆分,核心分为两步:先通过自定义公式生成各月的原始权重,再对权重做归一化处理,确保最终总和为100%,全程无需手动输入月度数值。

2. 具体实现步骤

步骤1:定义月度X值与自定义公式

将12个月映射为公式所需的X输入(比如直接用1-12的月份序号,或根据业务需求调整为其他数值),然后代入你的特定公式Y = f(X)计算每个月的原始权重。

步骤2:归一化处理

原始公式计算出的权重总和通常不等于100%,因此需要做归一化:
月度百分比 = (该月原始权重 / 所有月份权重总和) * 100%
通过这一步,所有月份的百分比总和会精确等于100%。

3. C#代码示例

以下是可直接运行的代码,示例中使用Y = X²作为演示公式,你可以替换成自己的目标公式:

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

class MonthlySplitCalculator
{
    static void Main()
    {
        // 生成1-12月的X取值(可按需替换为公式需要的其他X序列)
        var monthXValues = Enumerable.Range(1, 12).ToList();
        
        // 替换为你的特定公式Y=f(X),示例为Y=X²
        Func<int, double> customFormula = x => Math.Pow(x, 2);
        
        // 计算每个月的原始权重
        var rawWeights = monthXValues.Select(x => customFormula(x)).ToList();
        
        // 计算权重总和,用于归一化
        double totalWeight = rawWeights.Sum();
        
        // 归一化得到月度百分比,保留2位小数
        var monthlyPercentages = rawWeights
            .Select(weight => Math.Round((weight / totalWeight) * 100, 2))
            .ToList();
        
        // 输出结果
        Console.WriteLine("月度百分比分布(总和100%):");
        for (int i = 0; i < monthXValues.Count; i++)
        {
            Console.WriteLine($"第{monthXValues[i]}个月:{monthlyPercentages[i]}%");
        }
        
        // 验证总和(四舍五入可能产生微小误差,可调整精度)
        Console.WriteLine($"\n总和校验:{monthlyPercentages.Sum():F2}%");
    }
}

关键注意事项

  • 公式替换:直接修改customFormula委托的逻辑即可替换为你的特定公式,比如线性增长x * 1.2、正弦曲线Math.Sin(x * Math.PI / 6)等,只要是输入X输出数值的逻辑都适用。
  • X值调整:如果公式需要的X不是月份序号,比如按季度划分的数值,只需修改Enumerable.Range(1,12)为对应的X序列即可。
  • 精度控制:代码中用Math.Round保留2位小数,若需要更高精度可调整参数,或去掉四舍五入直接保留原始计算值(显示时建议格式化)。

内容的提问来源于stack exchange,提问作者Coruscate5

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 10:57:00