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

}

Android 房贷计算相关推荐

  1. Android Studio计算BMI小软件

    计算BMI安卓小软件 一.简单安卓入门小项目 开发软件:Android Studio,本软件有两个页面,一个是输入身高和体重页面,另一个是结果界面(注意:这个背景图名字为 bb.png ,图片会放到博 ...

  2. Android 身高计算

    代码 package  app.test; import  android.app.Activity; import  android.app.AlertDialog;  import  androi ...

  3. 利用“计算器”和公式做房贷计算

    等额本息公式还是挺复杂的,忽然想起以前写了一个"计算器",因而就想顺手把房贷利息计算给做了,还加上了提供月供计算利率的功能. 下图就是计算器的界面,支持:进制转换.四则运算.常用函 ...

  4. Android 动态计算ListView的高度

    目录 一.简介 二.效果图 三.代码实现 一.简介 在Android开发的过程中有的时候我们需要手动计算ListView的高度,比如说,ScrollView中嵌套ListView的时候,我们就需要手动 ...

  5. android中计算日期差,Android编程实现根据不同日期计算天数差的方法

    本文实例讲述了Android编程实现根据不同日期计算天数差的方法.分享给大家供大家参考,具体如下: Calendar cal1 = getCalendarFromDate(mStartDate); l ...

  6. android 计算到期日期,在Android上计算日期

    我正在为Android构建一个应用程序,我需要存储一天并计算到那一天到来的天数. 我将这一天存储在共享的首选项上.首先,我初始化日历. Calendar next = Calendar.getInst ...

  7. android DPI 计算 及单位换算

    1. 术语和概念 术语 说明 备注 Screen size(屏幕尺寸) 指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸.指手机屏幕对角线长度. 摩托罗拉milest ...

  8. Android 金钱计算BigDecimal 的使用

    今天做了一个购物车的功能 ,设计到了钱的计算,使用到了BigDecimal 晚上回来总结下 这个BigDecimal 计算钱呢很好用 其主要有 1 add 加法 2 subtract 减法 3 mul ...

  9. Python笔记-房贷计算(本息和本金,每月还利息和每月还本金)及作图对比

    如下例子: 贷款100万元,如果20年还清,年贷款利率为6%,如果按照等额还款,每月需要还款多少,如果按照等额本金还款,绘制每月还款额度 通过做图画比较,两种还款方式,每月还款的本金,利息以及总还款额 ...

  10. Android屏幕计算正方形,Android Camera 正方形预览(二)

    一.概述 为实现Camera正方形预览,本Demo使用GLSurfaceView显示Camera预览数据,本文也主要针对GLSurfaceView的使用做介绍. Android中的视图有View.Su ...

最新文章

  1. AI 版 Nature Index 排名,两种结果折射中国 AI 实力软肋
  2. java struts2模拟百度百科图片中的防盗链设置
  3. HDU 1231 最大连续子序列:水dp
  4. Python列表函数方法
  5. c语言 指针函数 详解,[NOTE-C]C语言指针详解(一)
  6. ROS安装并运行小乌龟
  7. CF990G-GCD Counting【dfs】
  8. 重磅资料!Github上的PHP资源汇总大全
  9. js f12就关闭标签、禁止右击,感兴趣的可以看一下
  10. 吴恩达深度学习4.2练习_Convolutional Neural Networks_Residual Networks
  11. php可以单干吗_拉伸膜包装机适合包装牛肉干吗?
  12. SHELL判断文件是否包含某个字串
  13. atitit.获取connection hibernate4
  14. 单片机段式LCD驱动教程
  15. 1128: mxh道歉记
  16. ruby语言学习-开启篇
  17. linux mv移动文件到指定目录,Linux mv命令使用示例-移动或重命令文件/目录
  18. 建立自己的封装库(一)
  19. 东北电力大学计算机学院教务处,2020年东北电力大学计算机学院初试
  20. 练习1-自定义input组件库知识要点

热门文章

  1. mdf导入虚拟主机mysql_MYSQL导入mdf文件
  2. js截取字符串第一个和最后一个字符
  3. 上传本地文件到服务器:not a regular file
  4. 企业邮箱安全中心在哪里,TOM邮箱安全设置中心
  5. 《巴菲特法则》书中的精髓:用好巴菲特企业前景投资法则,股票投资稳赚不赔。
  6. 思科cisco策略路由基本概念
  7. ts 修饰符_TS4 新特性一览
  8. Unity5.3官方VR教程重磅登场-系列4 VR中的用户界面
  9. 音乐格式转换软件测试工资,无损音乐如何转换 无损音乐格式转换 无损音乐转换器...
  10. zblog模板 php,卢松松博客模板zblogphp版 适合seo功能强大(已支持1.6)