房贷已经成为大家日常生活的一部分,还贷也是一个👪的必备功课,那么购房时你是选择按照等额本金还是等额本息来进行还贷呢?
从今天开始我们开始通过运用设计模式作为载体来给您详细讲解房贷中的哪些事,让你房贷计算与学习双赢---搞懂房贷还款有掌握设计模式的技能……
好了,今天我们先来普及一下房贷的两种还款方式的计算过程---等额本息和等额本金
等额本息
等额本息,是指一种[贷款](https://baike.baidu.com/item/%E8%B4%B7%E6%AC%BE/1129285)的还款方式。等额本息是在还款期内,每月偿还同等数额的[贷款](https://baike.baidu.com/item/%E8%B4%B7%E6%AC%BE/1129285)(包括[本金](https://baike.baidu.com/item/%E6%9C%AC%E9%87%91/11025685)和利息)。它和等额本金是不一样的概念,虽然刚开始还款时每月还款额可能会低于等额本金还款方式的额度,但是最终所还利息会高于等额本金还款方式,该方式经常被银行使用。

等额本金
每月月供额=(贷款本金÷还款月数)+(贷款本金-已归还本金累计额)×月利率
每月应还本金=贷款本金÷还款月数
每月应还利息=剩余本金×月利率=(贷款本金-已归还本金累计额)×月利率
每月月供递减额=每月应还本金×月利率=贷款本金÷还款月数×月利率
总利息=〔(总贷款额÷还款月数+总贷款额×月利率)+总贷款额÷还款月数×(1+月利率)〕÷2×还款月数-总贷款额

前置预设
//贷款总额
var load = Double(1000000)
//贷款年限
let year = 30
//正常贷款利率
let normalLevel = Double(0.049)
//上浮
let up = Double(0.25)
//实际利率
let upLevel = normalLevel * (Double(1)+up)
//平均月利率
let monthLevel = upLevel / Double(12)
//等额本金月还款本金
var monthDiv = Double(load)/Double(year*12)
typealias Year = Int
extension Year{
var months:Int{
return self*12
}
}
幂
extension Double{
func m(n:Int)->Double{
var totoal = self
for _ in 0 ..< n{
totoal = totoal*self
}
return totoal
}
}
详细计算
等额本机
/**
等额本金利息计算方法
等额本金每个月要归还的利息是根据当月未归还的本金计算出来的,所以计算起来比较简单。
等额本金当月利息=(贷款总额-累计已还本金)×月利率
每月归还本金=贷款总额÷归还月数
月利率=年利率÷12
等额本金总利息=(还款月数+1)×贷款总额×月利率÷2
我们通过举例说明等额本金利息怎么算的,例如张三向银行贷款10万元,期限为3年,分36期归还,年利率为6%。
月利率=6%÷12=0.5%
每月归还本金=100000÷36=2777.78元
第一个月利息=(100000-0)×0.5%=500元
第二个月利息=(100000-2777.78)×0.5%=486.11元
第三个月利息=(100000-2777.78×2)×0.5%=472.22元
由此可知,最后一个月的利息=(100000-2777.78×35)×0.5%=13.89元
等额本金总利息=(36+1)×100000×0.5%÷2=9250元
*/
for i in 0 ..< 30*12 {
//每月额度
let monthTotal = monthDiv + (load - monthDiv*Double(i)) * monthLevel
// 利息
let interest = (load - monthDiv*Double(i)) * monthLevel
// 剩余
let nextLoad = load - monthDiv*Double(I+1)
let monthMoney = MonthMoney(load: load, nextLoad:nextLoad, time: i, ben: monthDiv, interest: interest)
print("第\(i/12+1)年\(i%12+1)月===\(monthTotal) 本金\(monthDiv) 利息\(interest) 剩余\(nextLoad)")
}
等额本息
/**
解说: https://baike.baidu.com/item/等额本息还款法/8040344?fr=aladdin#1
*/
//每个月固定的还款额(推导算法看上面)
var x = load * monthLevel * ((Double(1)+monthLevel).m(n: 30*12)) / ((Double(1)+monthLevel).m(n: 30*12) - 1)
for i in 0 ..< 30*12 {
//剩余欠款总额
let am = load*(Double(1)+monthLevel).m(n: i)-x*((Double(1)+monthLevel).m(n: i)-1)/monthLevel
//剩余总额贷款月利息
let interest = am*monthLevel
let ben = x-am*monthLevel
let monthMoney = MonthMoney(load: load, nextLoad: am, time: i, ben: ben, interest: interest)
print(monthMoney)
// print("第\(i/12+1)年\(i%12+1)月===还款\(x) 本金\(ben) 利息\(interest)")
}
浏览结果


网友评论