大家好(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)) });