我正在尝试构建一个小程序来生成一个字符串输出,它将告诉我贷款的可偿还总额(按月复利)。我使用两个在线计算器验证我的工作,但两者都不同。
通过以下在线计算器验证以上内容:https://en-gb.calculatestuff.com/financial/loan-amortization-calculator
然而,在我得到的几乎所有其他在线计算器上:
示例:
Docker-Compose can't connect to Docker Daemon
此外,在我自己的代码中,我得到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;
}
答案 0 :(得分:1)
你的问题是你使用了错误的费率:你好像每月费率是12/12而实际上是(1 +年)^(1/12)-1(这是给年费的比率)当你复合12次时。
例如,对于7%的费率,月费率为~0.5654%,而非计算结果的0.5833%。
将您的公式从(double)annualInterestRate / 100/12替换为
Math.Pow(1+(yearlyInterestRate / 100),1.0/12)-1
应该给你正确的结果(每月约30.7789美元)
答案 1 :(得分:1)
根据我的借贷经验(仅限美国),较大的数字通常由贷方收取。他们计算“定期费率”,可以是每月固定费率,也可以根据贷款期间的天数计算。然后他们在期末计算未偿还本金的利息。
如果您使用来自贷款机构的在线计算器,他们给您的价值将是他们向您收取贷款的费用。您可能需要调整代码以获得所需的结果,但如果您从贷款机构借钱,您可能需要支付更高的费用。
我的一个抵押贷款人使用混合月/日费率。当我进行标准付款时,无论何时付款,都会收取全月利息。如果我支付额外费用,本金会立即减少,所以我下个月的利息可能会略微增加或减少,具体取决于我付款的日期。难以匹配他们的计算。我所有的其他贷方都使用了利率/ 12并通过减少下个月的本金来应用额外的付款。