[英]Javascript: I am trying to create dynamic table inside modal for amortization
[英]Annuity amortization table in JavaScript
我需要一个函数来帮助您,该函数可以计算按揭年金摊销表,其输出以cols为单位,按月,以下链接所示按月排序的付款金额,本金付款,利息付款等行: 输出示例
输出文件格式应为.cvs。 目前,我被这个女巫困住了,离结果还差得远:
var i = 5/100; var loanAmount = 15000; var m = 12; var monthlyPayment = loanAmount*(i/12)*Math.pow((1+i/12), m) / (Math.pow((1+i/12), m)-1) var currentBalance = loanAmount; var paymentCounter = 1; var totalInterest = 0; monthlyPayment = monthlyPayment; while(currentBalance > 0) { //this calculates the portion of your monthly payment that goes towards interest towardsInterest = (i/12)*currentBalance; if (monthlyPayment > currentBalance){ monthlyPayment = currentBalance + towardsInterest; } towardsBalance = monthlyPayment - towardsInterest; totalInterest = totalInterest + towardsInterest; currentBalance = currentBalance - towardsBalance; }
非常感谢您提供任何帮助。
尝试这样的事情:
const annuity = (C, i, n) => C * (i/(1-(1+i)**(-n)));
const balance_t = (C, i, P) => {
const period_movements = {
base: C
}
period_movements.interest = C*i;
period_movements.amortization = P - (C*i);
period_movements.annuity = P;
period_movements.final_value = Math.round((C - period_movements.amortization)*100)/100;
return period_movements;
}
const display_mortgage = (C, i, n) => {
const payements = annuity(C, i, n);
let movements = balance_t(C, i, payements);
while (movements.final_value>-.01){
console.log(movements);
movements = balance_t(movements.final_value, i, payements);
}
}
display_mortgage(20000, 0.05, 4);
输出:
{ base: 20000,
interest: 1000,
amortization: 4640.236652069255,
annuity: 5640.236652069255,
final_value: 15360 }
{ base: 15360,
interest: 768,
amortization: 4872.236652069255,
annuity: 5640.236652069255,
final_value: 10488 }
{ base: 10488,
interest: 524.4,
amortization: 5115.836652069255,
annuity: 5640.236652069255,
final_value: 5372 }
{ base: 5372,
interest: 268.6,
amortization: 5371.6366520692545,
annuity: 5640.236652069255,
final_value: 0 }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.