如何用Linq将全double类型DataTable转为double[][]并应用Math.Round?
使用LINQ将DataTable转换为带四舍五入的double[][]
当然可以用LINQ简化转换过程,同时还能在转换时对每个值应用Math.Round()方法,一行代码就能完成需求:
// 替换dt为你的DataTable实例,保留2位小数可根据需求调整 double[][] convertedArray = dt.AsEnumerable() .Select(row => row.ItemArray .Select(val => Math.Round(Convert.ToDouble(val), 2)) .ToArray()) .ToArray();
代码说明:
dt.AsEnumerable():把DataTable转换为可被LINQ操作的行集合,这是LINQ处理DataTable的前置步骤。Select(row => ...):遍历每一行,将单行数据转换为double[]数组。row.ItemArray:直接获取当前行的所有列值(因为DataTable无列头,不需要按列名取值),返回object[]类型。Math.Round(Convert.ToDouble(val), 2):先将object类型的列值转为double,再对数值进行四舍五入,第二个参数是要保留的小数位数,可根据业务需求修改(比如传入0就是保留整数)。- 两次调用
.ToArray():先把每行的处理结果转为double[],再把所有行的数组组合成double[][]二维数组。
额外提示:
如果担心实际场景中存在非double类型的异常值,可以添加安全转换逻辑,避免报错:
double[][] safeConvertedArray = dt.AsEnumerable() .Select(row => row.ItemArray .Select(val => { if (double.TryParse(val.ToString(), out double num)) return Math.Round(num, 2); // 处理转换失败的情况,比如返回默认值0 return 0.0; }) .ToArray()) .ToArray();
内容的提问来源于stack exchange,提问作者Demasterpl
相关产品推荐
相关产品推荐

