纯js版本房贷计算器

源码地址:

github地址:https://github.com/confidence68/houseCal

核心代码

代码语言:javascript
复制
   //等额本息计算
    benxi: function (type, num, year, lilv) {
        //每月月供额=〔贷款本金×月利率×(1+月利率)^还款月数〕÷〔(1+月利率)^还款月数-1〕
        var mouth = parseInt(year) * 12,
            mouthlilv = parseFloat(lilv) / 12,
            dknum = parseFloat(num) * 10000;
        //每月月供
        var yuegong = (dknum * mouthlilv * Math.pow((1 + mouthlilv), mouth)) / (Math.pow((1 + mouthlilv), mouth) - 1);
        //总利息=还款月数×每月月供额-贷款本金
        var totalLixi = mouth * yuegong - dknum;
        //还款总额 总利息+贷款本金
        var totalPrice = totalLixi + dknum,
            leftFund = totalLixi + dknum;
    //循环月份
    var mouthdataArray = [],
        nowmouth = new Date().getMonth(),
        realmonth = 0;

    for (var i = 1; i <= mouth; i++) {
        realmonth = nowmouth + i;
        var yearlist = Math.floor(i / 12);

        realmonth = realmonth - 12 * yearlist;

        if (realmonth > 12) {
            realmonth = realmonth - 12
        }
        //console.log(realmonth)
        //每月应还利息=贷款本金×月利率×〔(1+月利率)^还款月数-(1+月利率)^(还款月序号-1)〕÷〔(1+月利率)^还款月数-1〕
        var yuelixi = dknum * mouthlilv * (Math.pow((1 + mouthlilv), mouth) - Math.pow((1 + mouthlilv), i - 1)) / (Math.pow((1 + mouthlilv), mouth) - 1);
        //每月应还本金=贷款本金×月利率×(1+月利率)^(还款月序号-1)÷〔(1+月利率)^还款月数-1〕
        var yuebenjin = dknum * mouthlilv * Math.pow((1 + mouthlilv), i - 1) / (Math.pow((1 + mouthlilv), mouth) - 1);
        leftFund = leftFund - (yuelixi + yuebenjin);
        if (leftFund < 0) {
            leftFund = 0
        }
        mouthdataArray[i - 1] = {
            monthName: realmonth + "月",
            yuelixi: yuelixi,
            yuebenjin: yuebenjin,
            //剩余还款
            leftFund: leftFund
        }
    }
    return {
        yuegong: yuegong,
        totalLixi: totalLixi,
        totalPrice: totalPrice,
        mouthdataArray: mouthdataArray,
        totalDknum: num,
        year: year
    };
},
//等额本金计算
benjin: function (type, num, year, lilv) {
    var mouth = parseInt(year) * 12,
        mouthlilv = parseFloat(lilv) / 12,
        dknum = parseFloat(num) * 10000,
        yhbenjin = 0; //首月还款已还本金金额是0
    //每月应还本金=贷款本金÷还款月数
    var everymonthyh = dknum / mouth
    //每月月供额=(贷款本金÷还款月数)+(贷款本金-已归还本金累计额)×月利率
    var yuegong = everymonthyh + (dknum - yhbenjin) * mouthlilv;
    //每月月供递减额=每月应还本金×月利率=贷款本金÷还款月数×月利率
    var yuegongdijian = everymonthyh * mouthlilv;
    //总利息=〔(总贷款额÷还款月数+总贷款额×月利率)+总贷款额÷还款月数×(1+月利率)〕÷2×还款月数-总贷款额
    var totalLixi = ((everymonthyh + dknum * mouthlilv) + dknum / mouth * (1 + mouthlilv)) / 2 * mouth - dknum;
    //还款总额 总利息+贷款本金
    var totalPrice = totalLixi + dknum,
        leftFund = totalLixi + dknum;

    //循环月份
    var mouthdataArray = [],
        nowmouth = new Date().getMonth(),
        realmonth = 0;

    for (var i = 1; i <= mouth; i++) {
        realmonth = nowmouth + i;
        var yearlist = Math.floor(i / 12);

        realmonth = realmonth - 12 * yearlist;

        if (realmonth > 12) {
            realmonth = realmonth - 12
        }
        yhbenjin = everymonthyh * (i - 1);
        var yuebenjin = everymonthyh + (dknum - yhbenjin) * mouthlilv;
        //每月应还利息=剩余本金×月利率=(贷款本金-已归还本金累计额)×月利率
        var yuelixi = (dknum - yhbenjin) * mouthlilv;
        leftFund = leftFund - yuebenjin;
        if (leftFund < 0) {
            leftFund = 0
        }
        mouthdataArray[i - 1] = {
            monthName: realmonth + "月",
            yuelixi: yuelixi,
            //每月本金
            yuebenjin: everymonthyh,
            //剩余还款
            leftFund: leftFund
        }
    }
    return {
        yuegong: yuegong,
        totalLixi: totalLixi,
        totalPrice: totalPrice,
        yuegongdijian: yuegongdijian,
        mouthdataArray: mouthdataArray,
        totalDknum: num,
        year: year
    }

}</code></pre></div></div>