java编写一个贷款计算器

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;
    }
}

posted @ 2021-09-30 13:40  meteor119  阅读(1288)  评论(0编辑  收藏  举报