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