C# 将十进制列表四舍五入

C# 将十进制列表四舍五入,c#,linq,rounding,C#,Linq,Rounding,我正试图找到一种较短的方法来舍入列表中的每个元素,并想知道是否有一种方法可以使用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.Collec

我正试图找到一种较短的方法来舍入
列表中的每个元素,并想知道是否有一种方法可以使用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 masterList=dataSet
.选择(x=>x.Values)
托利斯先生()
.Select(i=>Math.Round(i,2));
///这会产生异常(无法从System.Collections.Generic.List转换为“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);
    }
}
List masterList=dataSet.Select(x=>x.Values.ToList();
foreach(主列表中的变量列表)
{
对于(var i=0;i
以下是一个使用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();
}
List List=新列表();
添加(新列表(){1.501M,2.231M,3M});
添加(新列表(){4.505M,5M,3M});
添加(新列表(){1M,7M,8M});
var result=list.Select(x=>x.Select(y=>Math.Round(y,2)).ToList()).ToList();
foreach(结果中的var a)
{
foreach(a中的var b)
{
控制台。写入(b+“\t”);
}
Console.WriteLine();
}

您应该使用
十进制.Round
,而不是
数学.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)

他可以教我们数学。同样,他只是在列表中使用它,而不是在列表中使用decimal@S.Petrosov啊,是的,请注意还有
Math.Round(dec,middpointrounding.ToEven)
选项。@BrendanGooden-这个答案没有给出您想要的结果。它需要
Decimal.Round(y,2)
@Enigmativity correct我已经学会了,但是谢谢:)