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

序号与精度问题:如何用foreach为列表元素生成子序号

解决子序号生成错误并改用foreach循环处理List

嘿,我来帮你搞定这两个问题:首先修正子序号的生成逻辑,然后把循环改成foreach来处理你的父序号List。

1. 为什么你的代码输出不对?

你现在的代码里,Convert.ToDecimal(i)是把整数i直接转成decimal,然后加到15上,结果自然是15+0=15、15+1=16... 要得到15.1、15.2这种带小数的子序号,得把i转换成0.1、0.2这样的小数步长才行。

而且要注意用10m(decimal后缀)来做除法,避免浮点精度问题。另外,如果你想要从15.1开始而不是15.0,得把i从1开始计数(或者用i+1来偏移)。

修正后的基础代码:

using System;
public class Program {
    public static void Main() {
        decimal sequenceNumber = 15;
        for (int i = 0; i < 10 ; i++) {
            // 用(i+1)让子序号从0.1开始,除以10m保证decimal精度
            decimal output = sequenceNumber + (i + 1) / 10m;
            Console.WriteLine(output);
        }
    }
}

运行这段代码就会输出15.1、15.2...15.10(如果只需要到15.9,把循环条件改成i < 9就行)。

2. 改用foreach处理父序号List

假设你的父序号存在一个List<int>里,我们可以先定义这个集合,然后用foreach遍历每个父序号,再为每个父序号生成对应的子序号。这里有两种写法,看你需求:

写法1:foreach遍历父序号 + 内部for生成子序号

这种写法适合子序号数量固定的场景:

using System;
using System.Collections.Generic;
public class Program {
    public static void Main() {
        // 定义你的父序号集合
        List<int> parentSequenceNumbers = new List<int> {15,16,17,18,19,20,21,22,23,24};
        
        // 遍历每个父序号
        foreach (int parentNum in parentSequenceNumbers) {
            Console.WriteLine($"=== 父序号 {parentNum} 的子序号 ===");
            // 生成10个子序号(从x.1到x.10)
            for (int i = 0; i < 10; i++) {
                decimal childNum = parentNum + (i + 1) / 10m;
                Console.WriteLine(childNum);
            }
        }
    }
}

写法2:完全用foreach循环(预定义子序号偏移量)

如果你想彻底不用for循环,可以预定义子序号的小数偏移集合,然后嵌套foreach:

using System;
using System.Collections.Generic;
public class Program {
    public static void Main() {
        List<int> parentSequenceNumbers = new List<int> {15,16,17,18,19,20,21,22,23,24};
        // 预定义子序号的小数偏移量
        List<decimal> childOffsets = new List<decimal> {
            0.1m, 0.2m, 0.3m, 0.4m, 0.5m,
            0.6m, 0.7m, 0.8m, 0.9m, 1.0m
        };
        
        foreach (int parentNum in parentSequenceNumbers) {
            Console.WriteLine($"=== 父序号 {parentNum} 的子序号 ===");
            foreach (decimal offset in childOffsets) {
                decimal childNum = parentNum + offset;
                Console.WriteLine(childNum);
            }
        }
    }
}

这样就完全用foreach处理所有循环了,输出结果和之前一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:19:06