SOURCE

// const P = 1000000; // 贷款本金
// const r = 4.2 / 100 / 12; // 月利率
// const n = 30 * 12; // 贷款期数

// let M = P * r * Math.pow(1 + r, n) / (Math.pow(1 + r, n) - 1); // 每月还款金额

// let remainingP = P; // 剩余本金

// const list = []

// for (let i = 1; i <= n; i++) {
//   if (i === 24) {
//     remainingP -= 100000; // 第24期提前还款10万
//     M = remainingP * r * Math.pow(1 + r, n - i) / (Math.pow(1 + r, n - i) - 1); // 重新计算每月还款金额
//   console.log(remainingP)
//   }
//   const interest = remainingP * r; // 第i月的还款利息
//   const principal = M - interest; // 第i月的还款本金
//   remainingP -= principal; // 更新剩余本金
//   list.push([principal.toFixed(2), interest.toFixed(2), M]);
//   // console.log(`第${i}月的还款本金:${principal.toFixed(2)},还款利息:${interest.toFixed(2)}`);
// }
// console.log(list);


const P = 1000000; // 贷款本金
const r = 4.2 / 100 / 12; // 月利率
const n = 30 * 12; // 贷款期数

const M = P * r * Math.pow(1 + r, n) / (Math.pow(1 + r, n) - 1); // 每月还款金额

let remainingP = P; // 剩余本金

const list = []

for (let i = 1; i <= n; i++) {
  if (i === 24) {
    remainingP -= 100000; // 第24期提前还款10万
  }
  const interest = remainingP * r; // 第i月的还款利息
  const principal = M - interest; // 第i月的还款本金
  remainingP -= principal; // 更新剩余本金

  if (remainingP <= 0) {
    console.log(`提前在第${i}期还清贷款`);
    break;
  }

  list.push([principal.toFixed(2), interest.toFixed(2), M]);
  console.log(`第${i}月的还款本金:${principal.toFixed(2)},还款利息:${interest.toFixed(2)}`);
}
console.log(list);
console 命令行工具 X clear

                    
>
console