房贷计算之草稿计算

2019-02-21  本文已影响2人  搞好关系

房贷已经成为大家日常生活的一部分,还贷也是一个👪的必备功课,那么购房时你是选择按照等额本金还是等额本息来进行还贷呢?
从今天开始我们开始通过运用设计模式作为载体来给您详细讲解房贷中的哪些事,让你房贷计算与学习双赢---搞懂房贷还款有掌握设计模式的技能……
好了,今天我们先来普及一下房贷的两种还款方式的计算过程---等额本息和等额本金

等额本息

等额本息,是指一种[贷款](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)")
}

浏览结果


等额本金 等额本息
上一篇 下一篇

猜你喜欢

热点阅读