我想获得两个十进制值的百分比。它单独给出正确的结果,但是当我添加两个结果值时,它会给出错误的结果。请检查我错在哪里。我正在分享我的代码
public decimal GetTotal()
{
decimal? total = 0;
decimal? total2 = 0;
decimal? count = 0;
decimal? count2 = 0;
decimal? result = 0;
decimal? loopcount = 0;
decimal? result1 = 0;
decimal? result2 = 0;
total = _db.Carts.Where(c => c.CartId == ShoppingCartId).Select(c => ((int?)c.Count * c.Part.Price)).Sum();
total2 = _db.Carts.Where(c => c.CartId == ShoppingCartId).Select(c => ((int?)c.Count * c.CustomerPrice)).Sum();
var cartList = _db.Carts.Where(c => c.CartId == ShoppingCartId).ToList();
foreach (var item in cartList)
{
count = total2.HasValue && item.Percentage.HasValue ? ((total2 / 100) * item.Percentage) - total2 : decimal.Zero; // 960
count2 = total.HasValue && item.Percentage.HasValue ? ((total / 100) * item.Percentage) - total : decimal.Zero;
loopcount++;
result1 += ((-1) * count);
result2 += ((-1) * count2);
result += result1.Value + result2.Value;
}
return result ?? decimal.Zero;
}
我想添加如960 + 432 = 1392,但它是3696,请检查
答案 0 :(得分:1)
最有可能的问题是,您在for循环中重复使用result
变量。当你写:
result1 += ((-1) * count);
这相当于:
result1 = result1 + ((-1) * count);
因此,在此点之前将result1
之前的任何值添加到((-1) * count)
,结果将分配回result1
。您可能在result2
和result
上遇到类似问题。
解决方案是在您使用它们之后清除变量(将它们重置为0),以便先前的值不会影响后面的计算或声明for循环中的临时变量仅用于在他们需要的范围内。