我正试图找到一种更简单的方法来舍入List<List<decimal>>
中的每个元素,并想知道我是否可以用Linq缩短它?
我尝试了几种方法,比如这个
List<List<Decimal>> masterList = dataSet
.Select(x => x.Values)
.ToList()
.Select(i => Math.Round(i, 2));
/// THIS GIVES AN EXCEPTION (CANNOT CONVERT FROM System.Collections.Generic.List<decimal> to 'double'
这是我目前的做法吗?
List<List<Decimal>> masterList = dataSet.Select(x => x.Values).ToList();
foreach (var list in masterList)
{
for(var i = 0; i < list.Count; i++)
{
list[i] = Math.Round(list[i], 2);
}
}
答案 0 :(得分:3)
您应该使用Decimal.Round
而不是Math.Round
来完成这项工作:
masterList = masterList.Select(
x => x.Select(y => Decimal.Round(y, 2)).ToList()
).ToList();
使用小数位数编辑(2)。此外,问题似乎出现在LINQ
声明中,而不是使用Math.Round
或Decimal.Round
。
Decimal.Round
是我对decimal
案例的偏好,尤其是当decimal
值需要转换为最短int
时。格式非常方便:Decimal.Round(val)
答案 1 :(得分:1)
以下是如何使用LINQ执行此操作的示例:
List<List<decimal>> list= new List<List<decimal>>();
list.Add(new List<decimal>(){ 1.501M,2.231M,3M});
list.Add(new List<decimal>(){ 4.505M,5M,3M});
list.Add(new List<decimal>(){ 1M,7M,8M});
var result = list.Select(x=>x.Select(y=>Math.Round(y,2)).ToList()).ToList();
foreach(var a in result)
{
foreach(var b in a)
{
Console.Write(b + "\t");
}
Console.WriteLine();
}