微信小程序 房贷计算器 js代码终极版

展示图

在这里插入图片描述

1.在utils 中创建文件calculateMortgage.ts

/** 
    假设房贷本金是60万,贷款年利率为4.8%即月利率为0.4%,分20年即240期偿还,等额本金还款,那么:
    1、每月应还本金=600000/240=2500元;
    2、首月应还利息=600000*0.4%=2400元,首月还款金额=2500+2400=4900元;
    3、次月应还利息=(600000-2500)*0.4%=2390元,次月还款金额=2500+2390=4890元;
    可见,等额本金的利息、月还款额均是以10元/月依次递减。
    4、总利息=(240+1)*600000*0.4%/2=289200元。
    以上就是关于“房贷等额本金算法”的相关内容,希望能对大家有所帮助。
*/
// 等额本金 LoanBenJin: number, yearStages: number, yearRates: number
export const averageCapital = (LoanBenJin: number, yearStages: number, yearRates: number) => {
    let benJin = LoanBenJin * 10000        // 总价格
    let monthStage = yearStages * 12       // 总期数
    let LoanYearRate = yearRates           // 总年利率
    let monthRates = (LoanYearRate) / 12 / 100   // 每月利率

    let moneyPrincipal = benJin / monthStage     // 1、每月应还本金=600000/240=2500元;


    let lists = []  // 定义数组用于装载列表
    var finishLiXiTotal = 0;              // 已还利息总和
    let unfinishedBenJinTotal =  benJin   // 还剩下本金总和
    var finishedBenJinTotal = 0;          // 已还本金
    for (var i = 0; i < monthStage; i++) {
        // 2、首月应还利息=600000*0.4%=2400元,首月还款金额=2500+2400=4900元;
        let needLiXi = (benJin - (i * moneyPrincipal)) * monthRates
        // 已还本金总和
        finishedBenJinTotal = doDanWei2(moneyPrincipal*(i+1))
        // 未还本金
        unfinishedBenJinTotal = doDanWei2(benJin - finishedBenJinTotal)
        // 利息总和
        finishLiXiTotal = doDanWei2(finishLiXiTotal + needLiXi)
        let k = {
            key: i + 1,
            title: `第${i + 1}期`,
            currentMonthTotal: doDanWei2(moneyPrincipal + needLiXi), // 当月需要还款总金额 =  当月需要还的本金 + 当月需要还的利息
            currentMonthBenJin: doDanWei2(moneyPrincipal),           // 当月需要还的本金
            currentMonthLiXi: doDanWei2(needLiXi),                   // 当月需要还的利息
            finishedBenJinTotal:doDanWei2(moneyPrincipal*(i+1)),       // 已还款本金总和
            unfinishedBenJinTotal :doDanWei2(unfinishedBenJinTotal),   // 还剩下本金总和
            finishLiXiTotal: doDanWei2(finishLiXiTotal),               // 已还利息总和
        }

        lists.push(k)
    }
    // 可见,等额本金的利息、月还款额均是以10元/月依次递减。
    // 4、总利息=(240+1)*600000*0.4%/2=289200元。
    let finishLiXiTotalAll = (monthStage + 1) * benJin * monthRates / 2
    // 以上就是关于“房贷等额本金算法”的相关内容,希望能对大家有所帮助。

    let returnInfo = {
        subKey:'principals',
        subTitle:'等额本金',
        benJin: benJin,                     // 借款额度
        bigBenJin:LoanBenJin,               // 大写本金
        yearStages:yearStages,              // 年总期数
        monthStage: monthStage,             // 月总期数
        yearRates:yearRates,                // 年利率
        monthRates:monthRates,              // 🈷️利率
        finishedTotal: doDanWei2(benJin + finishLiXiTotal), // 需要还的总钱数 = 本金 + 利息
        liXi: finishLiXiTotalAll,           // 总利息
        lists: lists,                       // 分期列表详情
    }
    return returnInfo
}

// // 等额本息
export const principalInterest = (LoanBenJin: number, yearStages: number, yearRates: number) =>{
    let benJin = LoanBenJin * 10000                  // 总价格
    let monthStage = yearStages * 12                 // 总期数
    let monthRates = (yearRates) / 12 / 100          // 每月利率

    //  1.每月还款额 = 总贷款额 X 月利率 X ( 1+月利率 ) ^ 还款期数 / ( ( 1+月利率 ) ^ 还款期数 -1 )
    var currentMonthTotal = doDanWei2((benJin * monthRates * Math.pow( (1+monthRates),monthStage) ) / ( Math.pow( (1+monthRates),monthStage ) -1))

    var finishedBenJinTotal = 0;          // 已还本金
    var finishLiXiTotal = 0;              // 已还利息总和
    let unfinishedBenJinTotal =  benJin   // 还剩下本金总和
    let lists = []                        // 定义数组用于装载列表
    for(var i =1; i < monthStage+1 ;i++){
        // 当月需要还的利息
        var currentMonthLiXi = (benJin - finishedBenJinTotal) * monthRates;
        //  当月需要还的本金
        var currentMonthBenJin = currentMonthTotal - currentMonthLiXi;
        //  已还款本金总和
        finishedBenJinTotal +=  currentMonthBenJin;
        //  已还本金总和
        unfinishedBenJinTotal = benJin - finishedBenJinTotal;
        //  已还利息总和
        finishLiXiTotal += currentMonthLiXi;

         let k = {
            key: i,
            title: `第${i}期`,
            currentMonthTotal:doDanWei2(currentMonthTotal),    // 当月需要还款总金额 =  当月需要还的本金 + 当月需要还的利息
            currentMonthBenJin: doDanWei2(currentMonthBenJin), // 当月需要还的本金
            currentMonthLiXi: doDanWei2(currentMonthLiXi),     // 当月需要还的利息
            finishedBenJinTotal:doDanWei2(finishedBenJinTotal),        // 已还款本金总和
            unfinishedBenJinTotal :doDanWei2(unfinishedBenJinTotal),   // 还剩下本金总和
            finishLiXiTotal: doDanWei2(finishLiXiTotal),               // 已还利息总和
        }
        lists.push(k)
    }

    let returnInfo = {
        subKey:'averages',
        subTitle:'等额本息',
        benJin: benJin,                     // 借款额度
        bigBenJin:LoanBenJin,               // 大写本金
        yearStages:yearStages,              // 年总期数
        monthStage: monthStage,             // 月总期数
        yearRates:yearRates,                // 年利率
        monthRates:monthRates,              // 🈷️利率
        finishedTotal: doDanWei2(benJin + finishLiXiTotal), // 需要还的总钱数 = 本金 + 利息
        liXi: doDanWei2(finishLiXiTotal),   // 总利息
        lists: lists,                       // 分期列表详情
    }
    return returnInfo
}



// 计算金额
const doDanWei = (num: number) => {
    if (Math.floor(num) === num) return num
    let k = Number((Number(num.toFixed(2)) + 0.01).toFixed(2))
    return k
}
// 计算金额
const doDanWei2 = (num: number) => {
    if (Math.floor(num) === num) return num
    let k = Number(num.toFixed(2))
    return k
}
export const doDanWei1 = (num: number) => {
    if (Math.floor(num) === num) return num
    let k = Number(num.toFixed(2))
    return k
}


2. 在需要使用的地方引入并传参

import { principalInterest, averageCapital } from '../../utils/calculateMortgage'

let averages = averageCapital(LoanBenJin, this.data.yearStages, yearRate) // 总金额W 、分期年限、年率利

let principals = principalInterest(LoanBenJin, this.data.yearStages, yearRate) // 总金额W、分期年限、年率利
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值