我试图构建一个小程序来生成一个字符串输出,它将告诉我贷款的总可偿还金额(每月复合利息)。我使用两个在线计算器来验证我的工作,但是两者都不同。
上面的内容通过以下在线计算器进行验证:https://www.moneysupermarket.com/loans/calculator/
然而,在我得到的几乎所有其他在线计算器上:
示例:
https://en-gb.calculatestuff.com/financial/loan-amortization-calculator
http://www.calculator.net/amortization-calculator.html?cloanamount=1000&cloanterm=3&cinterestrate=7&printit=0&x=69&y=15
此外,在我自己的代码中,我得到了1,111.53。所以我有点搞不懂到底哪一个值是正确的。我想接近第一个金额1,108.04,因为这是我被要求找到的值,但不确定我在这里遗漏了什么。
public void CompoundCalculator(double lenderRate, double loanPeriodInMonths, double desiredLoanAmount){
var repaymentAmount = PMT(7, 36, 1000);
var balance = desiredLoanAmount;
var totalInterest = 0.00;
for (var i = 0; i < loanPeriodInMonths;i++)
{
var monthlyInterest = Math.Round(balance * ( (lenderRate / 1200) ),2);
balance -= Math.Round(repaymentAmount - monthlyInterest,2) ;
totalInterest += monthlyInterest;
}
//do something here later with totalInterest variable
}
public static double PMT(double yearlyInterestRate, int totalNumberOfMonths, double loanAmount)
{
var rate = (double)yearlyInterestRate / 100 / 12;
var denominator = Math.Pow((1 + rate), totalNumberOfMonths) - 1;
return (rate + (rate / denominator)) * loanAmount;
}发布于 2017-09-29 19:40:59
你的问题是你使用了错误的比率:你把月利率变成年率/ 12,而它实际上是(1+yearlyrate)^(1/12)-1 (这是当你把年率合成12次时给出年率的比率。
例如,对于7%的比率,每月的比率是0.5654%,而不是你的计算所发现的0.5833%。
将公式从(双)yearlyInterestRate/ 100 / 12改为
Math.Pow(1+(yearlyInterestRate / 100),1.0/12)-1应该给你正确的结果(每月~30.7789美元)
发布于 2017-09-29 20:12:36
根据我的借款经验(仅在美国),贷款方收取的费用更多。他们计算出一个“定期利率”,它可以是一个固定的月利率,也可以是根据贷款期间的天数计算的。然后在期末计算未偿本金的利息。
如果你使用贷款机构的在线计算器,他们给你的价值将是他们向你收取的贷款费用。您可能需要调整您的代码以获得预期的结果,但如果您从贷款机构借款,您可能会得到更高的付款。
我的一个抵押贷款贷款人使用了一个月/日混合利率。当我支付标准付款时,无论何时付款,都会收取整整一个月的利息。如果我多付了钱,本金马上就会减少,所以我下个月的利息可能或多或少取决于我付款的哪一天。很难和他们的相配。我的所有其他贷款人都使用了利率/12,并通过降低下个月的本金来支付额外的款项。
https://stackoverflow.com/questions/46494528
复制相似问题