Android实现房贷计算器功能

Android实现房贷计算器功能

本文实例为大家分享了Android实现房贷计算器的具体代码,供大家参考,具体内容如下

package com.atomic.moretool; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MortgageCal extends AppCompatActivity {     private EditText allLoan,yearInterestRate,loanYear;     private Button calLoan;     private ListView ShowDebx,ShowDebj;     private TextView debxTotalInterest;     private TextView debjTotalInterest;     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_mortgagecal);         findCompent();         calLoan.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View view) {                 showDebx();                 showDebj();             }         });     }     private void showDebx(){         SimpleAdapter simpleAdapter=new SimpleAdapter(this,cal_debx(),R.layout.show_debx,                 new String[]{"debxmonth","debxmonthloan","debxmonthprincipal","debxmonthinterest"},                 new int[]{R.id.debx_month,R.id.listview_debx_month_loan,R.id.listview_debx_month_principal,R.id.listview_debx_month_interest});         ShowDebx.setAdapter(simpleAdapter);     }     private void showDebj(){         SimpleAdapter simpleAdapter=new SimpleAdapter(this,cal_debj(),R.layout.show_debj,                 new String[]{"debjmonth","debjmonthloan","debjmonthprincipal","debjmonthinterest","debjmonthdecrease"},                 new int[]{R.id.debj_month,R.id.listview_debj_month_loan,R.id.listview_debj_month_principal,R.id.listview_debj_month_interest,R.id.listview_debj_month_decrease});         ShowDebj.setAdapter(simpleAdapter);     }     private void findCompent() {         allLoan=findViewById(R.id.all_loan);         yearInterestRate=findViewById(R.id.year_interest_rate);         loanYear=findViewById(R.id.loan_year);         allLoan.setSelectAllOnFocus(true);         yearInterestRate.setSelectAllOnFocus(true);         loanYear.setSelectAllOnFocus(true);         calLoan=findViewById(R.id.cal_loan);         ShowDebx=findViewById(R.id.show_debx);         ShowDebj=findViewById(R.id.show_debj);         debxTotalInterest=findViewById(R.id.debx_total_interest);         debjTotalInterest=findViewById(R.id.debj_total_interest);     }     private List<Map<String,Object>> cal_debx(){         /*  <!--等额本息-->         每月还款总额=贷款本金×[月利率×(1+月利率)^还款月数]÷[(1+月利率)^还款月数-1]         每月应还本金=贷款本金×月利率×(1+月利率)^(还款月序号-1)÷〔(1+月利率)^还款月数-1〕         每月应还利息=贷款本金×月利率×〔(1+月利率)^还款月数-(1+月利率)^(还款月序号-1)〕÷〔(1+月利率)^还款月数-1〕         总利息=还款月数×每月还款总额-贷款本金          */         String AllLoan=allLoan.getText().toString().trim();//贷款多少         String YearInterestRate=yearInterestRate.getText().toString().trim();//年利率         String LoanYear=loanYear.getText().toString().trim();//贷款年数         if (!AllLoan.equals("") && !YearInterestRate.equals("") && !LoanYear.equals("")){             double allloan=Double.parseDouble(AllLoan);//贷款多少             double yearinterestrate=Double.parseDouble(YearInterestRate);//年利率             double monthinterestrate=yearinterestrate/12;//月利率             double loanyear=Double.parseDouble(LoanYear);//贷款年数             double loanmonth=loanyear*12;//还款月数             //......需要设置还款月序号             //......需要已归还本金累计额             //......需要剩余本金             List<Map<String,Object>> debx_list=new ArrayList<>();             for (int i=1;i<=(int)loanmonth;i++){                 Map<String,Object> map=new HashMap<>();                 // <!--等额本息-->                 //每月还款总额=贷款本金×[月利率×(1+月利率)^还款月数]÷[(1+月利率)^还款月数-1]                 double DebxMonthLoan=new BigDecimal(allloan*monthinterestrate*Math.pow((1+monthinterestrate),loanmonth)/(Math.pow((1+monthinterestrate),loanmonth)-1)).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();                 //每月应还本金=贷款本金×月利率×(1+月利率)^(还款月序号-1)÷〔(1+月利率)^还款月数-1〕                 double DebxMonthPrincipal=new BigDecimal(allloan*monthinterestrate*Math.pow((1+monthinterestrate),(i-1))/(Math.pow((1+monthinterestrate),loanmonth)-1)).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();                 //每月应还利息=贷款本金×月利率×〔(1+月利率)^还款月数-(1+月利率)^(还款月序号-1)〕÷〔(1+月利率)^还款月数-1〕                 double DebxMonthInterest=new BigDecimal(allloan*monthinterestrate*((Math.pow((1+monthinterestrate),loanmonth))-Math.pow((1+monthinterestrate),(i-1)))/(Math.pow((1+monthinterestrate),loanmonth)-1)).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();                 map.put("debxmonth",String.valueOf(i)+"月");                 map.put("debxmonthloan",String.valueOf(DebxMonthLoan));                 map.put("debxmonthprincipal",String.valueOf(DebxMonthPrincipal));                 map.put("debxmonthinterest",String.valueOf(DebxMonthInterest));                 debx_list.add(map);             }             //每月还款总额             double DebxMonthLoan=new BigDecimal(allloan*monthinterestrate*Math.pow((1+monthinterestrate),loanmonth)/(Math.pow((1+monthinterestrate),loanmonth)-1)).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();             //总利息=还款月数×每月还款总额-贷款本金             double DebxInterest=new BigDecimal(loanmonth*DebxMonthLoan-allloan).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();             debxTotalInterest.setText(String.valueOf(DebxInterest));             return debx_list;         }else{             Toast.makeText(this, "先输入与选择内容", Toast.LENGTH_SHORT).show();         }         return null;     }     private List<Map<String,Object>> cal_debj() {         /* <!--等额本金-->         每月还款总额=(贷款本金÷还款月数)+(贷款本金-已归还本金累计额)×月利率         每月应还本金=贷款本金÷还款月数         每月应还利息=剩余本金×月利率=(贷款本金-已归还本金累计额)×月利率。         每月月供递减额=每月应还本金×月利率=贷款本金÷还款月数×月利率         总利息=还款月数×(总贷款额×月利率-月利率×(总贷款额÷还款月数)*(还款月数-1)÷2+总贷款额÷还款月数)         */         String AllLoan = allLoan.getText().toString().trim();//贷款多少         String YearInterestRate = yearInterestRate.getText().toString().trim();//年利率         String LoanYear = loanYear.getText().toString().trim();//贷款年数         if (!AllLoan.equals("") && !YearInterestRate.equals("") && !LoanYear.equals("")) {             double allloan = Double.parseDouble(AllLoan);//贷款多少             double yearinterestrate = Double.parseDouble(YearInterestRate);//年利率             double monthinterestrate = yearinterestrate / 12;//月利率             double loanyear = Double.parseDouble(LoanYear);//贷款年数             double loanmonth = loanyear * 12;//还款月数             //......需要已归还本金累计额             //......需要剩余本金             List<Map<String, Object>> debj_list = new ArrayList<>();             for (int i = 1; i <= (int) loanmonth; i++) {                 Map<String, Object> map = new HashMap<>();                 // <!--等额本金-->                 //每月应还本金=贷款本金÷还款月数                 double DebjMonthPrincipal = new BigDecimal(allloan / loanmonth).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();                 //每月还款总额=(贷款本金÷还款月数)+(贷款本金-累计已还款本金)×月利率                 double DebjMonthLoan = new BigDecimal((allloan / loanmonth) + (allloan - DebjMonthPrincipal*i) * monthinterestrate).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();                 //每月应还利息=剩余本金×月利率=(贷款本金-累计已还款本金)×月利率。                 double DebjMonthInterest = new BigDecimal((allloan-DebjMonthPrincipal*i) * monthinterestrate).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();                 //每月月供递减额=每月应还本金×月利率=贷款本金÷还款月数×月利率                 double DebjMonthDecrease = new BigDecimal(DebjMonthPrincipal * monthinterestrate).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();                 map.put("debjmonth",String.valueOf(i)+"月");                 map.put("debjmonthloan",String.valueOf(DebjMonthLoan));                 map.put("debjmonthprincipal",String.valueOf(DebjMonthPrincipal));                 map.put("debjmonthinterest",String.valueOf(DebjMonthInterest));                 map.put("debjmonthdecrease",String.valueOf(DebjMonthDecrease));                 debj_list.add(map);             }             //总利息=还款月数×(总贷款额×月利率-月利率×(总贷款额÷还款月数)*(还款月数-1)÷2+总贷款额÷还款月数)             double DebjInterest = new BigDecimal(((allloan/loanmonth+allloan*monthinterestrate)+allloan/loanmonth*(1+monthinterestrate))/2*loanmonth-allloan).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();             debjTotalInterest.setText(String.valueOf(DebjInterest));             return debj_list;         } else {             Toast.makeText(this, "先输入与选择内容", Toast.LENGTH_SHORT).show();         }         return null;     } }

xml:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:orientation="vertical"     android:layout_margin="15sp"     android:layout_width="match_parent"     android:layout_height="match_parent">     <LinearLayout         android:layout_marginBottom="15sp"         android:orientation="horizontal"         android:layout_width="match_parent"         android:layout_height="wrap_content">         <TextView             android:text="贷款年数"             android:textSize="14sp"             android:layout_width="wrap_content"             android:layout_height="wrap_content"/>         <EditText             android:text="20"             android:inputType="number"             android:layout_weight="1"             android:id="@+id/loan_year"             android:layout_width="match_parent"             android:layout_height="wrap_content"/>         <TextView             android:text="年利率"             android:textSize="14sp"             android:layout_width="wrap_content"             android:layout_height="wrap_content"/>         <EditText             android:text="0.0635"             android:inputType="number"             android:layout_weight="1"             android:id="@+id/year_interest_rate"             android:layout_width="match_parent"             android:layout_height="wrap_content"/>     </LinearLayout>     <LinearLayout         android:gravity="center|left"         android:layout_marginBottom="10sp"         android:layout_width="match_parent"         android:layout_height="wrap_content"         tools:ignore="RtlHardcoded">         <TextView             android:text="贷款多少"             android:textSize="14sp"             android:layout_width="wrap_content"             android:layout_height="wrap_content"/>         <EditText             android:inputType="number"             android:layout_marginEnd="10sp"             android:text="180000"             android:id="@+id/all_loan"             android:layout_weight="1"             android:layout_width="match_parent"             android:layout_height="wrap_content"/>         <Button             android:background="@drawable/button_style"             android:id="@+id/cal_loan"             android:text="计算"             android:layout_width="wrap_content"             android:layout_height="wrap_content"/>     </LinearLayout>     <LinearLayout         android:layout_marginBottom="5sp"         android:layout_width="match_parent"         android:layout_height="wrap_content">         <TextView             android:layout_marginEnd="10sp"             android:text="[等额本息]"             android:textSize="20sp"             android:layout_width="wrap_content"             android:layout_height="wrap_content"/>         <TextView             android:text="总利息: "             android:layout_width="wrap_content"             android:layout_height="wrap_content"/>         <TextView             android:id="@+id/debx_total_interest"             android:layout_width="wrap_content"             android:layout_height="wrap_content"/>     </LinearLayout>     <LinearLayout         android:orientation="horizontal"         android:layout_width="match_parent"         android:layout_height="wrap_content">         <TextView             android:layout_weight="1"             android:text="每月总还款"             android:layout_width="wrap_content"             android:layout_height="wrap_content"/>         <TextView             android:layout_weight="1"             android:text="每月还本金"             android:layout_width="wrap_content"             android:layout_height="wrap_content"/>         <TextView             android:layout_weight="1"             android:text="每月还利息"             android:layout_width="wrap_content"             android:layout_height="wrap_content"/>     </LinearLayout>     <ListView         android:layout_weight="1"         android:id="@+id/show_debx"         android:layout_width="match_parent"         android:layout_height="wrap_content"/>     <LinearLayout         android:layout_marginTop="15sp"         android:layout_marginBottom="5sp"         android:layout_width="match_parent"         android:layout_height="wrap_content">         <TextView             android:layout_marginEnd="15sp"             android:text="[等额本金]"             android:textSize="20sp"             android:layout_width="wrap_content"             android:layout_height="wrap_content"/>         <TextView             android:text="总利息:"             android:layout_width="wrap_content"             android:layout_height="wrap_content"/>         <TextView             android:id="@+id/debj_total_interest"             android:layout_width="wrap_content"             android:layout_height="wrap_content"/>     </LinearLayout>     <LinearLayout         android:orientation="horizontal"         android:layout_width="match_parent"         android:layout_height="wrap_content">         <TextView             android:layout_weight="1"             android:text="月总还款"             android:layout_width="wrap_content"             android:layout_height="wrap_content"/>         <TextView             android:layout_weight="1"             android:text="月还本金"             android:layout_width="wrap_content"             android:layout_height="wrap_content"/>         <TextView             android:layout_weight="1"             android:text="月还利息"             android:layout_width="wrap_content"             android:layout_height="wrap_content"/>         <TextView             android:layout_weight="1"             android:text="月供递减"             android:layout_width="wrap_content"             android:layout_height="wrap_content"/>     </LinearLayout>     <ListView         android:layout_weight="1"         android:id="@+id/show_debj"         android:layout_width="match_parent"         android:layout_height="wrap_content"/> </LinearLayout>

推荐阅读