按揭贷款的计算原理与java实现
Number部分(6) Mortgage Calculator--按揭贷款计算器
题目描述:
Mortgage Calculator – Calculate the monthly payments of a fixed term mortgage over given Nth terms at a given interest rate. Also figure out how long it will take the user to pay back the loan.
题目翻译:
按揭贷款计算器——在给定利率下,计算固定期限按揭贷款在第N期的月还款。同时计算用户需要多长时间来偿还贷款。
按揭贷款的相关概念(Mortgage)
什么是按揭贷款
抵押贷款是指提供私人资产作为债务担保进行借款,多发生于购买房地产时英航借出的抵押贷款。抵押贷款的类型
抵押贷款的类型有多种,主要通过一下几个因素来定义抵押贷款的类型。- 利率(interest) :分为固定利率和浮动利率
- 期限(Term) :按揭贷款通常拥有最大还款期限
- 还款数额与还款频率(Payment amount and frequency) :规定两次还款之间的时间间隔以及在每个周期内需要还款的数目
- 预付款(PrePayment):贷款方提前支付的预付款
还款方式
按揭贷款一般采用分期还款,在固定汇率的情况下,规定一个还款期限,然后每月按时还一定数额。
常见的两种还款方式:等额本息还款和等额本金还款
两种还款方案每月还款金额计算如下:
假定贷款的年利率为r,还款年限为Y年,贷款本金为P,每月还款金额为A
贷款的月利率\(R =r/12\), 还款期数为\(N=12Y\)等额本息还款:
等额本息还款是指在还款时,每个月总的还款金额是相同的。每月所还本金和所还利息是变化的
假定第t个还款月还款后,剩余的总还款金额为 \(p(t)\).\[\begin{aligned}
&p(0)=P\\
&p(1)=p(0)(1+R)-A=P(1+R)-A\\
&p(2)=P(1)(1+R)-A=[P(1+R)-A](1+R)-A=P(1+R)^2-(1+R)A-A\\
&...\\
&p(t)=P(1+R)^t-A(1+R)^{t-1}-A(1+R)^{t-2}-...-A(1+R)-A\\
\end{aligned}
\]我们可以得到每月还款后剩余还款金额\(p(t)\)的表达式:
\[\begin{aligned}
p(t)&=P(1+R)^t-A\sum_{i=0}^{t-1}(1+R)^i\\
&=P(1+R)^t-A\frac{1-(1+R)^t}{1-(1+R)}\\
&=P(1+R)^t-A\frac{(1+R)^t-1}{R}
\end{aligned}\]我们给定的还款期数为N,也就是说\(p(N)=0\),我们可以求出每月还款数额A。
由方程\[\begin{aligned}
P(n)=P(1+R)^N-A\frac{(1+R)^N-1}{R}=0\\
\end{aligned}\]可以得到
\[\begin{aligned}
A&=\frac{PR(1+R)^N}{(1+R)^N-1}\\
\end{aligned}\]也就是说,如果采用等额本息的方式来还款,每月需要还款的数额为\(\frac{PR(1+R)^N}{(1+R)^N-1}\)
虽然每个月的还款数额相同,每月所还得利息和本金是变化的
第t+1个还款月需要还的利息\(i(t+1)\),为该月还款前的剩余还款金额\(p(t)\)乘以月利率R\[\begin{aligned}
i(t+1)&=p(t)R\\
&=PR(1+R)^t-A(1+R)^t+A\\
&=(PR-A)(1+R)^t+A\\
&=((PR-A)(1+R)^{t-1}+A)(1+R)-A(1+R)+A\\
&=i(t)(1+R)-AR\\
\end{aligned}\]因为\((PR-A)<0\),所以\(i(t)\)是关于t的减函数,也就是说每个月的还款金额中,利息所占的比重是降低的,而本金所占的比重是上升的
等额本金还款:
在等额本金还款方式中,每个月还款的本金是相同,但是每个月所还的利息不同,所以每个月的还款总金额是变化的。
每个月需要还得本金pr为总本金除以总的还款月数。\[\begin{aligned}
pr = \frac{P}{N}
\end{aligned}\]每个月需要还得利息\(pi(t)\) = (本金-已归还的本金之和)*每月利率
\[\begin{aligned}
pi(t)& = (P-pr(t-1))R\\
&=-prAt+(A+P)R\\
&=-\frac{PR}{N}t+(\frac{P}{N}+P)R\\
\end{aligned}\]可以看到,每个月所还利息\(pi(t)\)是关于t的减函数,说明每个月所还的利息是逐渐减少的。由于每个月所还的本金数额不变,所以每个月所还贷款总额是递减的。
程序实现
用户输入贷款汇率,贷款总金额,还款的年限和选择的还款方式。
程序输出用户每个月需要还款的总金额以及需要偿还的本金和利息数额。
import java.util.Scanner;
public class MortgageCalculator{
public static void mortgageCalcute(double P,double interest,int Y,int type){
//输入参数贷款总额P,贷款利率interest,还款年限Y,还款类型type(0表示等额本息还款方式,1表示等额本金还款方式)
switch(type){
case 0:
equalLoanPayment(P,interest,Y);
break;
case 1:
equalPrincipalPayment(P,interest,Y);
break;
}
}
public static void equalLoanPayment(double P,double interest,int Y){ //等额本息还款计算函数
int N = Y*12;
double R = interest/12;
double A = P*R*Math.pow(1+R,N)/(Math.pow(1+R,N)-1);
System.out.printf("每月偿还的本息%7.2f\n",A*10000);
double[] pi = new double[N];
pi[0] = P*R;
System.out.printf("第1个月需要偿还的利息:%8.2f 第1个月需要偿还的本金为:%7.2f\n",pi[0]*10000,(A-pi[0])*10000);
for(int i=1;i<N;i++){
pi[i] = pi[i-1]*(1+R)-A*R;
System.out.printf("第%d个月需要偿还的利息:%7.2f 第%d个月需要偿还的本金为:%7.2f\n",i+1,pi[i]*10000,i+1,(A-pi[i])*10000);
}
}
public static void equalPrincipalPayment(double P,double interest,int Y){ //等额本金还款计算函数
int N = Y*12; //还款的总月份
double R = interest/12; //还款的月利率
double A = P*1.0/N; //每月需要还得本金
System.out.printf("每月需要偿还的本金%7.2f\n",A*10000);
double[] pi = new double[N+1];
for(int i=1;i<=N;i++){
pi[i] = -P*R*1.0/N*i+(P/N+P)*R;
System.out.printf("第%d个月需要偿还的利息:%7.2f.第%d个月需要偿还的本息:%7.2f\n",i+1,pi[i]*10000,i+1,(pi[i]+A)*10000);
}
}
public static void main(String[] args){
//equalPrincipalPayment(45.4, 3.25/100, 15);
Scanner sc = new Scanner(System.in);
System.out.println("选择还款方式: 0 等额本息,1 等额本金");
int PaymentType = sc.nextInt();
System.out.println("输入还款总额(单位:万),还款年利率(百分数)与还款年限,用空格隔开");
double Payment = sc.nextDouble();
double interest = sc.nextDouble();
int years = sc.nextInt();
sc.close();
System.out.println("还款总额:"+Payment+"还款年利率:"+interest+"% "+"还款年限:"+years+"年");
mortgageCalcute(Payment,interest/100,years,PaymentType);
}
}
按揭贷款的计算原理与java实现的更多相关文章
- 005-hive概述,计算原理及模型
计算原理及模型 优化的根本思想: 尽早尽量过滤数据,减少每个阶段的数据量 减少job数 解决数据倾斜问题 Hive概述 名称 hive系统架构 metastore derbymysql ...
- OpenGL中摄像机矩阵的计算原理
熟悉OpenGL|ES的朋友,可能会经常设置摄像机的view矩阵,iOS中相对较好,已经封装了方向,只需要设置摄像机位置,目标点位置以及UP向量即可.下面先介绍下摄像机view矩阵的计算原理.此处假设 ...
- (原创)sklearn中 F1-micro 与 F1-macro区别和计算原理
最近在使用sklearn做分类时候,用到metrics中的评价函数,其中有一个非常重要的评价函数是F1值,(关于这个值的原理自行google或者百度) 在sklearn中的计算F1的函数为 f1_sc ...
- CLH lock 原理及JAVA实现
--喜欢记得关注我哟[shoshana]-- 前记 JUC中的Lock中最核心的类AQS,其中AQS使用到了CLH队列的变种,故来研究一下CLH队列的原理及JAVA实现 一. CLH背景知识 SMP ...
- 全基因组关联分析(GWAS)的计算原理
前言 关于全基因组关联分析(GWAS)原理的资料,网上有很多. 这也是我写了这么多GWAS的软件教程,却从来没有写过GWAS计算原理的原因. 恰巧之前微博上某位小可爱提问能否写一下GWAS的计算原理. ...
- 前端移动端的rem适配计算原理
rem是什么? rem(font size of the root element)是指相对于根元素的字体大小的单位.简单的说它就是一个相对单位.看到rem大家一定会想起em单位,em(font si ...
- mapreducer计算原理
mapreducer计算原理
- 跳跃表-原理及Java实现
跳跃表-原理及Java实现 引言: 上周现场面试阿里巴巴研发工程师终面,被问到如何让链表的元素查询接近线性时间.笔者苦思良久,缴械投降.面试官告知回去可以看一下跳跃表,遂出此文. 跳跃表的引入 我们知 ...
- 一致性Hash算法原理,java实现,及用途
学习记录: 一致性Hash算法原理及java实现:https://blog.csdn.net/suifeng629/article/details/81567777 一致性Hash算法介绍,原理,及使 ...
随机推荐
- matlab中wvtool
参考:https://ww2.mathworks.cn/help/signal/ref/wvtool.html?searchHighlight=wvtool&s_tid=doc_srchtit ...
- Win10系统中文显示乱码怎么解决
来源:https://jingyan.baidu.com/article/d8072ac4ba20cfec94cefd48.html 简单的说是: 全部设置改为中国而且一定要重启系统,无论时间还是区域 ...
- JVM 第三篇:Java 类加载机制
本文内容过于硬核,建议有 Java 相关经验人士阅读. 1. 什么是类的加载? 类的加载指的是将类的 .class 文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个 ...
- Python+Appium自动化测试(6)-元素等待方法与重新封装元素定位方法
在appium自动化测试脚本运行的过程中,因为网络不稳定.测试机或模拟器卡顿等原因,有时候会出现页面元素加载超时元素定位失败的情况,但实际这又不是bug,只是元素加载较慢,这个时候我们就会使用元素等待 ...
- 三门峡6378.7939(薇)xiaojie:三门峡哪里有xiaomei
三门峡哪里有小姐服务大保健[微信:6378.7939倩儿小妹[三门峡叫小姐服务√o服务微信:6378.7939倩儿小妹[三门峡叫小姐服务][十微信:6378.7939倩儿小妹][三门峡叫小姐包夜服务] ...
- 【C/C++编程入门学习】C语言结构体硬核玩法分享,一切皆是数据!
前言 对于结构体的应用太多了,今天这篇文章我主要为大家总结平时关于结构体的一些独特硬核小技巧,对于结构体更多优秀的编程表现,如果你对结构体的基础知识还不具备的话得回头看一下专栏教程或者自己找本书籍学习 ...
- 使用Sparse Checkout 排除跟踪Git仓库中指定的目录或文件
应用场景 在一个大工程里包含由不同部门开发的模块时,项目的Git仓库肯定很大,造成每次Git操作相对比较耗时.因为开发人员一般只关心他们部门的模块的代码,所以完全可以排除一些他完全不需要用到的目录.这 ...
- 第六章 IP基本原理
一.引入 1.IP是网络层协议,也是当今应用最广泛的网络协议之一 2.IP协议规定了数据的封装方式,网络节点的标识方法,用于网络上数据的端到端的传递. 二.IP协议概述 1.IP及相关协议 2.IP的 ...
- Python包安装及使用指南
这里长期更新一些Python第三方包的安装教程,以及使用教程... Pygame 安装教程: Windows: 首先,查看已安装的Python版本:访问https://www.lfd.uci.edu/ ...
- 从0实现python批量爬取p站插画
一.本文编写缘由 很久没有写过爬虫,已经忘得差不多了.以爬取p站图片为着手点,进行爬虫复习与实践. 欢迎学习Python的小伙伴可以加我扣群86七06七945,大家一起学习讨论 二.获取网页源码 爬取 ...