四舍五入十进制列表

Bre*_*den 3 c# linq rounding

我试图找到一种更短的方法来舍入 a 中的每个元素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'
Run Code Online (Sandbox Code Playgroud)

这是我目前的做法吗?

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

Ian*_*Ian 5

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

masterList = masterList.Select(
    x => x.Select(y => Decimal.Round(y, 2)).ToList()
    ).ToList();
Run Code Online (Sandbox Code Playgroud)

编辑带有小数的(2)的数目。另外,问题似乎出在LINQ语句中,而不是使用Math.RoundorDecimal.Round

Decimal.Round不过是我对decimalcase 的偏好,尤其是当decimal值需要转换为最短的int. 格式非常方便:Decimal.Round(val)