https://blog.csdn.net/flueky/article/details/77099454
房贷有两种贷款方式:1是等额本息还款;2是等额本金还款。简单的说就是等额本息就是每月还款额相等,比如一个月固定还款3000元,每月不变,就是这种等额本息还款的方式。另外一种就是每月还款额不等,一个月比一个月少点。但是还款初期还款额比较大,越往后还款越少。具体哪种适合自己要结合自身的情况。如果看利息的话第二种还款总利息要少于第一种。
好了我们现在再说一下两者还款的计算方式:
(一)等额本息还款:
每月还本付息=【贷款本金x月利率x(1+月利率)^还款月数】/【(1+月利率)^还款月数-1】
每月还利息=剩余本金x贷款月利率(第一个月的本金就是贷款额,逐月递减)
每月还款本金=每月还款金额-每月还利息
剩余本金=上月剩余本金-本月偿还本金
还款总利息=贷款额X贷款月数x月利率x(1+月利率)^还款月数/【(1+还款月数)^还款月数-1】-贷款总额
注:^这个符号是次方的意思
主要计算公式就是这样,等额本息公式详细推导过程并不是很难,应用高中阶段的数学知识就可以完全理解清楚。
(二)等额本金还款
每月还本付息=(本金/还款月数)+(本金-累计已还本金)x月利率
每月本金=总本金/还款月数
每月利息=(本金-累计已还本金)x月利率
还款总利息=(还款月数+1)x贷款额x月利率/2
java编写一个简易版贷款计算器
1 import javax.swing.*; 2 import java.awt.*; 3 import java.awt.event.*; 4 import javax.swing.border.*; 5 6 public class LoanCalculator extends JFrame { 7 private class ButtonListener implements ActionListener { 8 @Override 9 public void actionPerformed(ActionEvent e) { 10 // TODO Auto-generated method stub 11 double interest= 12 Double.parseDouble(jtfAnnualInterestRate.getText()); 13 int year= 14 Integer.parseInt(jtfNumberOfYears.getText()); 15 double loanAmount= 16 Double.parseDouble(jtfLoanAmount.getText()); 17 18 double monthlyInterest=interest/1200; 19 double monthlyPayment= loanAmount*monthlyInterest/(1-1/Math.pow(1+monthlyInterest, 20 year*12)); 21 double totalPayment=monthlyPayment*year*12; 22 23 jtfMonthlyPayment.setText(String.format("%.2f", monthlyPayment)); 24 jtfTotalPayment.setText(String.format("%.2f", totalPayment)); 25 } 26 } 27 28 private JTextField jtfAnnualInterestRate=new JTextField(); 29 private JTextField jtfNumberOfYears=new JTextField(); 30 private JTextField jtfLoanAmount=new JTextField(); 31 private JTextField jtfMonthlyPayment=new JTextField(); 32 private JTextField jtfTotalPayment=new JTextField(); 33 34 private JButton jbtComputeLoan=new JButton("Compute Payment"); 35 36 public LoanCalculator(){ 37 JPanel p1=new JPanel(new GridLayout(5,2)); 38 p1.add(new JLabel("Annual Interest Rate")); 39 p1.add(jtfAnnualInterestRate); 40 p1.add(new JLabel("Number of Years")); 41 p1.add(jtfNumberOfYears); 42 p1.add(new JLabel("Loan Amount")); 43 p1.add(jtfLoanAmount); 44 p1.add(new JLabel("Monthly Payment")); 45 p1.add(jtfMonthlyPayment); 46 p1.add(new JLabel("Total Payment")); 47 p1.add(jtfTotalPayment); 48 p1.setBorder(new TitledBorder("Enter loan amount, interest rate," 49 + " and year")); 50 51 JPanel p2=new JPanel(new FlowLayout(FlowLayout.RIGHT)); 52 p2.add(jbtComputeLoan); 53 add(p1,BorderLayout.CENTER); 54 add(p2,BorderLayout.SOUTH); 55 jbtComputeLoan.addActionListener(new ButtonListener()); 56 57 } 58 59 public static void main(String[] args) { 60 // TODO Auto-generated method stub 61 LoanCalculator frame=new LoanCalculator(); 62 frame.setTitle("LoanCalculator"); 63 frame.pack(); 64 frame.setLocationRelativeTo(null); 65 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 66 frame.setVisible(true); 67 } 68 69 }
另一种编写方式:
https://blog.csdn.net/flueky/article/details/77099454
注:利率一律按照4.9计算。所有计算结果参照在线贷款计算公式
等额本息还款方式:每月还款本金+利息一样。
贷款本金100万,贷款期限30年,贷款利息91万元(近似值),那么月供191万元/360月。
等额本息的月供计算:
/** * 计算等额本息还款 * * @param principal 贷款总额 * @param months 贷款期限 * @param rate 贷款利率 * @return */ public static String[] calculateEqualPrincipalAndInterest(double principal, int months, double rate) { ArrayList<String> data = new ArrayList<String>(); double monthRate = rate / (100 * 12);//月利率 double preLoan = (principal * monthRate * Math.pow((1 + monthRate), months)) / (Math.pow((1 + monthRate), months) - 1);//每月还款金额 double totalMoney = preLoan * months;//还款总额 double interest = totalMoney - principal;//还款总利息 data.add(FORMAT.format(totalMoney));//还款总额 data.add(FORMAT.format(principal));//贷款总额 data.add(FORMAT.format(interest));//还款总利息 data.add(FORMAT.format(preLoan));//每月还款金额 data.add(String.valueOf(months));//还款期限 return data.toArray(new String[data.size()]); }
import java.text.DecimalFormat;
class FORMAT { public static String format(double totalMoney) { DecimalFormat df = new DecimalFormat("#.00"); String str = df.format(totalMoney); return str; } }