Android 房贷计算
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 房贷计算相关推荐
- Android Studio计算BMI小软件
计算BMI安卓小软件 一.简单安卓入门小项目 开发软件:Android Studio,本软件有两个页面,一个是输入身高和体重页面,另一个是结果界面(注意:这个背景图名字为 bb.png ,图片会放到博 ...
- Android 身高计算
代码 package app.test; import android.app.Activity; import android.app.AlertDialog; import androi ...
- 利用“计算器”和公式做房贷计算
等额本息公式还是挺复杂的,忽然想起以前写了一个"计算器",因而就想顺手把房贷利息计算给做了,还加上了提供月供计算利率的功能. 下图就是计算器的界面,支持:进制转换.四则运算.常用函 ...
- Android 动态计算ListView的高度
目录 一.简介 二.效果图 三.代码实现 一.简介 在Android开发的过程中有的时候我们需要手动计算ListView的高度,比如说,ScrollView中嵌套ListView的时候,我们就需要手动 ...
- android中计算日期差,Android编程实现根据不同日期计算天数差的方法
本文实例讲述了Android编程实现根据不同日期计算天数差的方法.分享给大家供大家参考,具体如下: Calendar cal1 = getCalendarFromDate(mStartDate); l ...
- android 计算到期日期,在Android上计算日期
我正在为Android构建一个应用程序,我需要存储一天并计算到那一天到来的天数. 我将这一天存储在共享的首选项上.首先,我初始化日历. Calendar next = Calendar.getInst ...
- android DPI 计算 及单位换算
1. 术语和概念 术语 说明 备注 Screen size(屏幕尺寸) 指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸.指手机屏幕对角线长度. 摩托罗拉milest ...
- Android 金钱计算BigDecimal 的使用
今天做了一个购物车的功能 ,设计到了钱的计算,使用到了BigDecimal 晚上回来总结下 这个BigDecimal 计算钱呢很好用 其主要有 1 add 加法 2 subtract 减法 3 mul ...
- Python笔记-房贷计算(本息和本金,每月还利息和每月还本金)及作图对比
如下例子: 贷款100万元,如果20年还清,年贷款利率为6%,如果按照等额还款,每月需要还款多少,如果按照等额本金还款,绘制每月还款额度 通过做图画比较,两种还款方式,每月还款的本金,利息以及总还款额 ...
- Android屏幕计算正方形,Android Camera 正方形预览(二)
一.概述 为实现Camera正方形预览,本Demo使用GLSurfaceView显示Camera预览数据,本文也主要针对GLSurfaceView的使用做介绍. Android中的视图有View.Su ...
最新文章
- AI 版 Nature Index 排名,两种结果折射中国 AI 实力软肋
- java struts2模拟百度百科图片中的防盗链设置
- HDU 1231 最大连续子序列:水dp
- Python列表函数方法
- c语言 指针函数 详解,[NOTE-C]C语言指针详解(一)
- ROS安装并运行小乌龟
- CF990G-GCD Counting【dfs】
- 重磅资料!Github上的PHP资源汇总大全
- js f12就关闭标签、禁止右击,感兴趣的可以看一下
- 吴恩达深度学习4.2练习_Convolutional Neural Networks_Residual Networks
- php可以单干吗_拉伸膜包装机适合包装牛肉干吗?
- SHELL判断文件是否包含某个字串
- atitit.获取connection hibernate4
- 单片机段式LCD驱动教程
- 1128: mxh道歉记
- ruby语言学习-开启篇
- linux mv移动文件到指定目录,Linux mv命令使用示例-移动或重命令文件/目录
- 建立自己的封装库(一)
- 东北电力大学计算机学院教务处,2020年东北电力大学计算机学院初试
- 练习1-自定义input组件库知识要点
热门文章
- mdf导入虚拟主机mysql_MYSQL导入mdf文件
- js截取字符串第一个和最后一个字符
- 上传本地文件到服务器:not a regular file
- 企业邮箱安全中心在哪里,TOM邮箱安全设置中心
- 《巴菲特法则》书中的精髓:用好巴菲特企业前景投资法则,股票投资稳赚不赔。
- 思科cisco策略路由基本概念
- ts 修饰符_TS4 新特性一览
- Unity5.3官方VR教程重磅登场-系列4 VR中的用户界面
- 音乐格式转换软件测试工资,无损音乐如何转换 无损音乐格式转换 无损音乐转换器...
- zblog模板 php,卢松松博客模板zblogphp版 适合seo功能强大(已支持1.6)