2017-05-11 17 views
3

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); 
    } 
} 

答えて

3

あなたが仕事をするために、Decimal.Round、ないMath.Roundを使用する必要があります。

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

編集と小数点以下の桁数(2)。また、Math.RoundまたはDecimal.Roundの代わりにLINQステートメントに問題があるようです。 の値を最短のintに変換する必要がある場合は、特にdecimalの場合は、

Decimal.Roundが好きです。書式は非常に便利です:Decimal.Round(val)

+0

彼は私たちもMath.Roundでもリストの上でそれを使用しました小数点ではなく –

+0

ありがとう!私が間違った何かをしていたことを知っていた –

+0

@ S.Petrosovああ、ちょうど 'Math.Round(dec、MidpointRounding.ToEven)'オプションもあることに注目してください。 – Ian

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(); 
} 
関連する問題