圆形列表的十进制列表

时间:2017-05-11 04:47:50

标签: c# linq rounding

我正试图找到一种更简单的方法来舍入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);
    }
}

2 个答案:

答案 0 :(得分:3)

您应该使用Decimal.Round而不是Math.Round来完成这项工作:

masterList = masterList.Select(
    x => x.Select(y => Decimal.Round(y, 2)).ToList()
    ).ToList();

使用小数位数编辑(2)。此外,问题似乎出现在LINQ声明中,而不是使用Math.RoundDecimal.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();
}