每年额外还款额:每年年冲的金额(如果没有年冲,或者是月冲,则填0)
public class MortgageCalculator {
private static final double INITIAL_PRINCIPAL = 800000; // 初始贷款总额
private static final double ANNUAL_RATE = 0.0285; // 年利率
private static final int TOTAL_YEARS = 30; // 贷款总年数
private static final double ANNUAL_EXTRA_PAYMENT = 24000; // 每年额外还款额
// 计算等额本息还款法的每月还款额
private static double calculateMonthlyPayment(double principal, double monthlyRate, int totalMonths) {
double monthlyPayment = principal * monthlyRate * Math.pow(1 + monthlyRate, totalMonths) / (Math.pow(1 + monthlyRate, totalMonths) - 1);
return monthlyPayment;
}
// 主方法,用于计算和打印每年的每月还款额
public static void main(String[] args) {
double principal = INITIAL_PRINCIPAL; // 当前贷款余额
double monthlyRate = ANNUAL_RATE / 12; // 月利率
// 打印每年每月的还款额
for (int year = 1; year <= TOTAL_YEARS; year++) {
int remainingMonths = (TOTAL_YEARS - year + 1) * 12; // 剩余月份数
double monthlyPayment = calculateMonthlyPayment(principal, monthlyRate, remainingMonths); // 计算当年每月还款额
System.out.printf("第%d年的每月还款额为:%.2f元\n", year, monthlyPayment);
// 更新贷款余额(减去年冲还款和当年的月供总额)
principal -= ANNUAL_EXTRA_PAYMENT;
if (principal > 0) {
principal -= monthlyPayment * 12;
} else {
// 如果贷款余额已经为负,则不再继续扣减月供
principal = 0;
}
// 如果贷款余额为负,则停止计算
if (principal <= 0) {
System.out.println("贷款已提前还清。");
break;
}
}
}
}