大家好(SRY的坏标题)
我有一个循环,每次通过都能得到一个舍入差。我想把它们累积起来,并把它加到我最后一次的成绩记录上。

var cumulatedRoundDifference = 0m;
var resultSet = Enumerable.Range(0, periods)
    .Select(currentPeriod => {
        var value = this.CalculateValue(currentPeriod);
        var valueRounded = this.CommercialRound(value);

        // Bad part :(
        cumulatedRoundDifference += value - valueRounded;
        if (currentPeriod == periods - 1)
           valueRounded = this.CommercialRound(value + valueRounded);

    return valuesRounded;
}

目前我的意见不太好。
有没有一个模式/算法来处理这样的事情,或者它在Linq中有没有聪明之处,没有一个变量在循环之外?
许多问候

最佳答案

看起来你在做两件事-舍入所有的东西,并计算总的舍入误差。
您可以删除lambda之外的变量,但随后需要两个查询。

var baseQuery = Enumerable.Range(0, periods)
   .Select(x => new { Value = CalculateValue(x), ValueRounded = CommercialRound(x) });
var cumulateRoundDifference = baseQuery.Select(x => x.Value - x.ValueRounded).Sum();
// LINQ isn't really good at doing something different to the last element
var resultSet = baseQuery.Select(x => x.ValueRounded).Take(periods - 1).Concat(new[] { CommercialRound(CalculateValue(periods - 1) + CommericalRound(periods - 1)) });

08-25 01:16