Android 房贷计算
来源:互联网 发布:电视怎么弄成网络电视 编辑:程序博客网 时间:2024/04/29 00:51
package com.demo;
import java.math.BigDecimal;
/**
* 描述:房贷计算公式(repayment method)
* 等额本息还款法:(average capital plus interest)
* 每月月供额=〔贷款本金×月利率×(1+月利率)^还款月数〕÷〔(1+月利率)^还款月数-1〕
* 每月应还利息=贷款本金×月利率×〔(1+月利率)^还款月数-(1+月利率)^(还款月序号-1)〕÷〔(1+月利率)^还款月数-1〕
* 每月应还本金=贷款本金×月利率×(1+月利率)^(还款月序号-1)÷〔(1+月利率)^还款月数-1〕 总利息=还款月数×每月月供额-贷款本金
* <p>
* 等额本金还款法:(average capital ) 每月月供额=(贷款本金÷还款月数)+(贷款本金-已归还本金累计额)×月利率
* 每月应还本金=贷款本金÷还款月数
* 每月应还利息=剩余本金×月利率=(贷款本金-已归还本金累计额)×月利率
* 每月月供递减额=每月应还本金×月利率=贷款本金÷还款月数×月利率
* 总利息=〔(总贷款额÷还款月数+总贷款额×月利率)+总贷款额÷还款月数×(1+月利率)〕÷2×还款月数-总贷款额 说明:月利率=年利率÷12
* 15^4=15×15×15×15(15的4次方,即4个15相乘的意思)
* <p>
* 作者:Administrator on 2016/12/16 13:44 邮箱:androidit@yeah.net
* BigDecimal公式
* BigDecimal add(BigDecimal augend) 加法运算
* BigDecimal subtract(BigDecimal subtrahend)减法运算
* BigDecimal multiply(BigDecimal multiplicand)法运算
* BigDecimal divide(BigDecimal divisor) 除法运算
*/
public class RateUtils {
//等额本金 〔(总贷款额÷还款月数+总贷款额×月利率)+总贷款额÷还款月数×(1+月利率)〕÷2×还款月数-总贷款额
private BigDecimal computeDEBJTotalRate(BigDecimal monthlyPayment,BigDecimal mStrikeRate,Integer montyTotal){
BigDecimal montyNum = new BigDecimal(montyTotal);
BigDecimal strikeRate = mStrikeRate.divide(new BigDecimal(100 * 12), 6, BigDecimal.ROUND_HALF_UP);// 月利率,四舍五入精确到6位小数
BigDecimal benj = monthlyPayment.multiply(new BigDecimal("10000"));// 本金
BigDecimal rate1 = BigDecimal.ONE.add(strikeRate);// (1+月利率)
BigDecimal m1 = benj.divide(montyNum,6,BigDecimal.ROUND_HALF_UP);//总贷款额÷还款月数
BigDecimal m2 = benj.multiply(strikeRate);//总贷款额×月利率
BigDecimal m3 = m1.add(m2);//(总贷款额÷还款月数+总贷款额×月利率)
BigDecimal m4 = benj.divide(montyNum, 6, BigDecimal.ROUND_HALF_UP);//总贷款额÷还款月数
BigDecimal m5 = m4.multiply(rate1);//总贷款额÷还款月数×(1+月利率)
BigDecimal m6 = m3.add(m5);//〔(总贷款额÷还款月数+总贷款额×月利率)+总贷款额÷还款月数×(1+月利率)〕
BigDecimal m7 = m6.divide(new BigDecimal(2),6,BigDecimal.ROUND_HALF_UP);//〔(总贷款额÷还款月数+总贷款额×月利率)+总贷款额÷还款月数×(1+月利率)〕÷2
BigDecimal m8 = m7.multiply(montyNum);//〔(总贷款额÷还款月数+总贷款额×月利率)+总贷款额÷还款月数×(1+月利率)〕÷2×还款月数
BigDecimal m9 = m8.subtract(benj).setScale(2);//〔(总贷款额÷还款月数+总贷款额×月利率)+总贷款额÷还款月数×(1+月利率)〕÷2×还款月数-总贷款额
BigDecimal m10 = m9.divide(new BigDecimal("10000"),3,BigDecimal.ROUND_HALF_UP);
return m10;
}
/**
* 等额本息 总利息=还款月数×每月月供额-贷款本金
* @param benj 贷款本金
* @param perMonthMoney 每月月供额
* @param montyTotal 还款月数
*/
private BigDecimal computeDEBXTotalRate(BigDecimal benj,BigDecimal perMonthMoney,Integer montyTotal){
BigDecimal m1 = perMonthMoney.multiply(new BigDecimal(montyTotal));
BigDecimal m2 = m1.subtract(benj);
return m2.divide(new BigDecimal("10000"),3,BigDecimal.ROUND_HALF_UP);
}
/**
* 等额本息 (每月月供额=〔贷款本金×月利率×(1+月利率)^还款月数〕÷〔(1+月利率)^还款月数-1〕)
*/
private BigDecimal perDEBXMonthMoney(BigDecimal monthlyPayment,BigDecimal mStrikeRate,Integer montyTotal) {
BigDecimal strikeRate = mStrikeRate.divide(new BigDecimal(100 * 12), 6, BigDecimal.ROUND_HALF_UP);// 月利率,四舍五入精确到6位小数
BigDecimal benj = monthlyPayment.multiply(new BigDecimal("10000"));// 本金
BigDecimal rate1 = BigDecimal.ONE.add(strikeRate);// (1+月利率)
BigDecimal m1 = benj.multiply(strikeRate);//贷款本金×月利率
BigDecimal m2 = rate1.pow(montyTotal);//(1+月利率)^还款月数
BigDecimal m3 = m1.multiply(m2);//(每月月供额=〔贷款本金×月利率×(1+月利率)^还款月数〕
BigDecimal m4 = m2.subtract(new BigDecimal(1));
BigDecimal m5 = m3.divide(m4,2,BigDecimal.ROUND_HALF_UP);
System.out.println("等额本息,每月月供-->"+m5.toBigInteger());//〔(1+月利率)^还款月数-1〕)
return m5;
}
/**
* 每月月供(等额本金还款法) 每月月供额=(贷款本金÷还款月数)+(贷款本金-已归还本金累计额)×月利率
*/
private BigDecimal perDHBJMonthMoney(BigDecimal monthlyPayment,BigDecimal mStrikeRate,Integer montyTotal) {
BigDecimal strikeRate = mStrikeRate.divide(new BigDecimal(100 * 12), 6, BigDecimal.ROUND_HALF_UP);// 月利率,四舍五入精确到6位小数
BigDecimal benj = monthlyPayment.multiply(new BigDecimal("10000"));// 本金
BigDecimal m1 = benj.divide(new BigDecimal(montyTotal),6,BigDecimal.ROUND_HALF_UP);// (贷款本金÷还款月数)
BigDecimal m2 = benj.subtract(new BigDecimal(0)); // (贷款本金-已归还本金累计额)首月归还0
BigDecimal m3 = m2.multiply(strikeRate);// (贷款本金-已归还本金累计额)×月利率
BigDecimal m4 = m1.add(m3).setScale(2);
System.out.println("等额本金,每月月供-->"+m4.toString());
return m4;
}
public static void main(String[] args) {
RateUtils t = new RateUtils();
BigDecimal mStrikeRate = new BigDecimal("4.75");// 年利率
Integer montyTotal = 5*12;
BigDecimal monthlyPayment = new BigDecimal("15");// 100万贷款
BigDecimal benj = monthlyPayment.multiply(new BigDecimal("10000"));// 本金
BigDecimal t1 = t.perDEBXMonthMoney(monthlyPayment,mStrikeRate,montyTotal);
BigDecimal t2 = t.perDHBJMonthMoney(monthlyPayment,mStrikeRate,montyTotal);
BigDecimal t3 = t.computeDEBXTotalRate(benj,t1,montyTotal);
BigDecimal t4 = t.computeDEBJTotalRate(monthlyPayment, mStrikeRate, montyTotal);
System.out.println("等额本息-总利息->"+t3.toString());
System.out.println("等额本金-总利息->"+t4.toString());
}
}
import java.math.BigDecimal;
/**
* 描述:房贷计算公式(repayment method)
* 等额本息还款法:(average capital plus interest)
* 每月月供额=〔贷款本金×月利率×(1+月利率)^还款月数〕÷〔(1+月利率)^还款月数-1〕
* 每月应还利息=贷款本金×月利率×〔(1+月利率)^还款月数-(1+月利率)^(还款月序号-1)〕÷〔(1+月利率)^还款月数-1〕
* 每月应还本金=贷款本金×月利率×(1+月利率)^(还款月序号-1)÷〔(1+月利率)^还款月数-1〕 总利息=还款月数×每月月供额-贷款本金
* <p>
* 等额本金还款法:(average capital ) 每月月供额=(贷款本金÷还款月数)+(贷款本金-已归还本金累计额)×月利率
* 每月应还本金=贷款本金÷还款月数
* 每月应还利息=剩余本金×月利率=(贷款本金-已归还本金累计额)×月利率
* 每月月供递减额=每月应还本金×月利率=贷款本金÷还款月数×月利率
* 总利息=〔(总贷款额÷还款月数+总贷款额×月利率)+总贷款额÷还款月数×(1+月利率)〕÷2×还款月数-总贷款额 说明:月利率=年利率÷12
* 15^4=15×15×15×15(15的4次方,即4个15相乘的意思)
* <p>
* 作者:Administrator on 2016/12/16 13:44 邮箱:androidit@yeah.net
* BigDecimal公式
* BigDecimal add(BigDecimal augend) 加法运算
* BigDecimal subtract(BigDecimal subtrahend)减法运算
* BigDecimal multiply(BigDecimal multiplicand)法运算
* BigDecimal divide(BigDecimal divisor) 除法运算
*/
public class RateUtils {
//等额本金 〔(总贷款额÷还款月数+总贷款额×月利率)+总贷款额÷还款月数×(1+月利率)〕÷2×还款月数-总贷款额
private BigDecimal computeDEBJTotalRate(BigDecimal monthlyPayment,BigDecimal mStrikeRate,Integer montyTotal){
BigDecimal montyNum = new BigDecimal(montyTotal);
BigDecimal strikeRate = mStrikeRate.divide(new BigDecimal(100 * 12), 6, BigDecimal.ROUND_HALF_UP);// 月利率,四舍五入精确到6位小数
BigDecimal benj = monthlyPayment.multiply(new BigDecimal("10000"));// 本金
BigDecimal rate1 = BigDecimal.ONE.add(strikeRate);// (1+月利率)
BigDecimal m1 = benj.divide(montyNum,6,BigDecimal.ROUND_HALF_UP);//总贷款额÷还款月数
BigDecimal m2 = benj.multiply(strikeRate);//总贷款额×月利率
BigDecimal m3 = m1.add(m2);//(总贷款额÷还款月数+总贷款额×月利率)
BigDecimal m4 = benj.divide(montyNum, 6, BigDecimal.ROUND_HALF_UP);//总贷款额÷还款月数
BigDecimal m5 = m4.multiply(rate1);//总贷款额÷还款月数×(1+月利率)
BigDecimal m6 = m3.add(m5);//〔(总贷款额÷还款月数+总贷款额×月利率)+总贷款额÷还款月数×(1+月利率)〕
BigDecimal m7 = m6.divide(new BigDecimal(2),6,BigDecimal.ROUND_HALF_UP);//〔(总贷款额÷还款月数+总贷款额×月利率)+总贷款额÷还款月数×(1+月利率)〕÷2
BigDecimal m8 = m7.multiply(montyNum);//〔(总贷款额÷还款月数+总贷款额×月利率)+总贷款额÷还款月数×(1+月利率)〕÷2×还款月数
BigDecimal m9 = m8.subtract(benj).setScale(2);//〔(总贷款额÷还款月数+总贷款额×月利率)+总贷款额÷还款月数×(1+月利率)〕÷2×还款月数-总贷款额
BigDecimal m10 = m9.divide(new BigDecimal("10000"),3,BigDecimal.ROUND_HALF_UP);
return m10;
}
/**
* 等额本息 总利息=还款月数×每月月供额-贷款本金
* @param benj 贷款本金
* @param perMonthMoney 每月月供额
* @param montyTotal 还款月数
*/
private BigDecimal computeDEBXTotalRate(BigDecimal benj,BigDecimal perMonthMoney,Integer montyTotal){
BigDecimal m1 = perMonthMoney.multiply(new BigDecimal(montyTotal));
BigDecimal m2 = m1.subtract(benj);
return m2.divide(new BigDecimal("10000"),3,BigDecimal.ROUND_HALF_UP);
}
/**
* 等额本息 (每月月供额=〔贷款本金×月利率×(1+月利率)^还款月数〕÷〔(1+月利率)^还款月数-1〕)
*/
private BigDecimal perDEBXMonthMoney(BigDecimal monthlyPayment,BigDecimal mStrikeRate,Integer montyTotal) {
BigDecimal strikeRate = mStrikeRate.divide(new BigDecimal(100 * 12), 6, BigDecimal.ROUND_HALF_UP);// 月利率,四舍五入精确到6位小数
BigDecimal benj = monthlyPayment.multiply(new BigDecimal("10000"));// 本金
BigDecimal rate1 = BigDecimal.ONE.add(strikeRate);// (1+月利率)
BigDecimal m1 = benj.multiply(strikeRate);//贷款本金×月利率
BigDecimal m2 = rate1.pow(montyTotal);//(1+月利率)^还款月数
BigDecimal m3 = m1.multiply(m2);//(每月月供额=〔贷款本金×月利率×(1+月利率)^还款月数〕
BigDecimal m4 = m2.subtract(new BigDecimal(1));
BigDecimal m5 = m3.divide(m4,2,BigDecimal.ROUND_HALF_UP);
System.out.println("等额本息,每月月供-->"+m5.toBigInteger());//〔(1+月利率)^还款月数-1〕)
return m5;
}
/**
* 每月月供(等额本金还款法) 每月月供额=(贷款本金÷还款月数)+(贷款本金-已归还本金累计额)×月利率
*/
private BigDecimal perDHBJMonthMoney(BigDecimal monthlyPayment,BigDecimal mStrikeRate,Integer montyTotal) {
BigDecimal strikeRate = mStrikeRate.divide(new BigDecimal(100 * 12), 6, BigDecimal.ROUND_HALF_UP);// 月利率,四舍五入精确到6位小数
BigDecimal benj = monthlyPayment.multiply(new BigDecimal("10000"));// 本金
BigDecimal m1 = benj.divide(new BigDecimal(montyTotal),6,BigDecimal.ROUND_HALF_UP);// (贷款本金÷还款月数)
BigDecimal m2 = benj.subtract(new BigDecimal(0)); // (贷款本金-已归还本金累计额)首月归还0
BigDecimal m3 = m2.multiply(strikeRate);// (贷款本金-已归还本金累计额)×月利率
BigDecimal m4 = m1.add(m3).setScale(2);
System.out.println("等额本金,每月月供-->"+m4.toString());
return m4;
}
public static void main(String[] args) {
RateUtils t = new RateUtils();
BigDecimal mStrikeRate = new BigDecimal("4.75");// 年利率
Integer montyTotal = 5*12;
BigDecimal monthlyPayment = new BigDecimal("15");// 100万贷款
BigDecimal benj = monthlyPayment.multiply(new BigDecimal("10000"));// 本金
BigDecimal t1 = t.perDEBXMonthMoney(monthlyPayment,mStrikeRate,montyTotal);
BigDecimal t2 = t.perDHBJMonthMoney(monthlyPayment,mStrikeRate,montyTotal);
BigDecimal t3 = t.computeDEBXTotalRate(benj,t1,montyTotal);
BigDecimal t4 = t.computeDEBJTotalRate(monthlyPayment, mStrikeRate, montyTotal);
System.out.println("等额本息-总利息->"+t3.toString());
System.out.println("等额本金-总利息->"+t4.toString());
}
}
0 0
- Android 房贷计算
- 房贷计算公式
- 房贷计算
- 房贷收益计算
- 房贷还款计算
- 房贷计算说明
- 房贷计算公式
- 房贷计算
- 计算房贷 公积金贷款 自由还款 程序
- EXCEL2007应用心得——用EXCEL计算房贷
- 房贷
- 写一个MySql存储过程实现房贷等额本息还款计算(另外附javascript代码)
- 如何多次房贷
- 房贷知识
- 房贷首付
- 房贷之虑
- 房贷首付
- 房贷首付购房
- [Math] 矩阵求导规则
- clipboard 实现复制
- 调用记事本使用快捷键
- Java web项目从tomcat转为weblogic环境所遇到的问题
- EditText.setText()无效
- Android 房贷计算
- 【SpringMVC】SpringMVC基础-SpringMVC项目快速搭建、日志框架为logback
- MATLAB中函数bwmorph的用法
- tomcat manager 无法使用
- 架构设计需要注重以下几点
- HTML5 网页模版
- 学习笔记
- android:仿淘宝商品详情下拉展示浏览历史
- Chapter4-4 用于数组的文件输入和输出 Chapter4-5 线性代数