C#如何计算上下边界区间内均匀等距分布的数值
C# 生成指定首尾等间距数值序列实现方案
你需要的是包含首尾共40个值的等差数列,相邻值间距完全相等,核心要注意40个值之间的间隔总数是39段,不是40段,这是最容易写错的逻辑点。
核心计算步骤
- 第一步:固定入参:下边界
lower = 0.5,上边界upper = 100.0,序列总长度count = 40 - 第二步:计算固定步长:
step = (upper - lower) / (count - 1),代入当前参数算得步长约为2.5513 - 第三步:按索引逐一生成值:第i个值(i从0开始计数)为
lower + step * i,i=0时对应第一个值0.5,i=39时对应第40个值100.0
可直接运行的代码示例
using System; using System.Collections.Generic; class EqualSpaceSequenceGenerator { static void Main() { // 初始化边界参数 double lowerBoundary = 0.5; double upperBoundary = 100.0; int totalLength = 40; List<double> targetSequence = GenerateSequence(lowerBoundary, upperBoundary, totalLength); // 结果校验 Console.WriteLine($"序列首值:{targetSequence[0]}"); Console.WriteLine($"序列尾值:{targetSequence[^1]}"); Console.WriteLine($"序列总长度:{targetSequence.Count}"); // 需要获取38个中间值直接遍历targetSequence取索引1到38的元素即可 } static List<double> GenerateSequence(double lower, double upper, int count) { if (count < 2) throw new ArgumentException("序列长度至少为2才能覆盖首尾两个边界值"); List<double> sequence = new List<double>(count); double step = (upper - lower) / (count - 1); for (int i = 0; i < count; i++) { // 最后一个值直接赋值上边界,避免浮点数累计误差导致末尾值偏差 if (i == count - 1) { sequence.Add(upper); } else { sequence.Add(lower + step * i); } } return sequence; } }
注意事项
- 如果是金融等对精度要求极高的场景,可以把代码中的
double类型替换为decimal,计算逻辑完全不变 - 如果不需要存储完整序列,要获取指定位置的数值可以直接套公式计算:第n个值(n从1开始计数)= 下边界 + 步长 * (n-1)
- 不要错误把步长计算的除数写成总个数40,那样生成的第40个值会大于100.0,不符合需求
内容的提问来源于stack exchange,提问作者hiaslfried321
相关产品推荐
相关产品推荐

