C#为什么十进制数学返回零?

时间:2018-07-05 18:47:16

标签: c#

我在ASP.net MVC项目中有一个方法,该方法应该从某些列表中提取某些值的总和,将它们加在一起,然后将它们乘以一个值。列表从SQL表中提取,存储为十进制值,当我使用Linq检索值的总和时,它们就是十进制值。但是,当我尝试相乘或相加时,结果始终为零。

private Decimal LLR = 0.00284M;
private Decimal GetStandardReserveForLoan(List<Loan> loans, List<LineOfCredit> locs)    
{
    decimal l = locs.Sum(x => x.MaxCredit ?? 0M);
    decimal loan = loans.Sum(x => x.LoanAmount ?? 0M);
    decimal subtotal = loan + l;
    decimal total = subtotal * LLR;
    return total;
}

当我在decimal total =行上设置断点并查看本地变量时,subtotal = 0total = 0。我什至可以进入立即窗口,将loan + l17500.00相加,再乘以(loan + l) * LLR得到49.7

为什么我可以在立即窗口中获得正确的值,但是该方法将不会返回正确的值?

2 个答案:

答案 0 :(得分:1)

您要传递给Sum()的输入值可能为空。从Sum() documentation

  

如果source不包含任何元素,则Sum(IEnumerable)方法将返回零。

答案 1 :(得分:0)

我通过将行更改为loan的方式将行添加了一个明确的小数点来固定计算,例如:

decimal loan = loans.Sum(x => x.LoanAmount ?? 0.00M);

该方法现在为我正确返回49.700000。