房贷30年和100年谁更划算,写个vue实例告诉你

简介: 房贷30年和100年谁更划算,写个vue实例告诉你

image.png

各位大佬准备买房了么? 你知道贷款30年和贷款100年,首月还款额会降低多少么? 让我们用vue写个房贷计算器来告诉你吧。

各位前端大佬,不要笑话,运维小弟献丑了。



效果展示


码上掘金

code.juejin.cn/pen/7142029…

运行展示

image.png


image.png


为了直观方便,我们列一个表格吧

贷款金额: 100W 年利率: 5.8%
贷款时间 等额本金(首月还款) 等额本息(首月还款)
30年 ¥7,611.11 ¥5,867.53
50年 ¥6,500.00 ¥5,116.85
100年 ¥5,666.67 ¥4,848.22
1000年 ¥4,916.67 ¥4,833.33




初始化项目


如果你已经使用过【码上掘金】创建项目,可以略过本段落。

我们打开【码上掘金】(code.juejin.cn/) ,选择【新建代码片段】【新建空白片段】来创建拥有vue.js环境的项目。

image.png

创建完毕后,我们引入vue.js,在【Script】右边的设置按钮,我们点击后,可以弹出引用依赖界面。

image.png


我们在【添加依赖资源】处填写上: cdn.jsdelivr.net/npm/vue@2.6…

image.png

至此,我们项目初始化便完成了。

我们写个demo尝试下

image.png

如上,我们编写了一个demo且顺利运行,就证明环境设置的没问题。



页面编写


我们设想我们整个页面分为2部分,左边部分为用户输入,右边为展示页面,具体图如下:

image.png

计算展示结果,我们就用表格套出来就可以了,这个暂不介绍,我们着重要介绍下用户输入部分。作为一款房贷计算器,最主要的功能是让用户输入 贷款额、贷款利率、贷款年限以及贷款方式,所以,我们很容易写出骨架代码来,如下:

<div id="app">
  <div id="op">
    <h1>房贷计算器</h1>
    <label>贷款金额:</label>
    <input class="inputNum" type="number">
    <label>万</label>
    <br />
    <label>贷款利率: </label>
    <input class="inputNum" type="number">
    <label>%</label>
    <br />
    <label>贷款方式: </label>
    <input type="radio" name="modes" value="type1">
    等额本金
    <label></label>
    <input type="radio" name="modes" value="type2">
    等额本息
    <br />
    <label> 贷款年限: </label> 
    <input class="inputNum" type="number">
    <label>年</label>
    <br />
    <br />
    <button @click="getInterestInfo">计算利率</button>
    <br />
    <br />
  </div>
</div>

image.png


就是几个input框 再加 一个 按钮,就可以完成该需求,这里不过多做展示,我们稍微修饰下css,再看看效果,这里就不贴css代码了哈。

image.png


哎,是不是感觉清爽很多了呢。




贷款计算方法


贷款分为【等额本金】 和 【等额本息】 ,我们简单介绍下2者的区别以及算法。


我们假设贷款30W,贷款年利率:5.8% ,贷款年限: 30年。


我们来看下使用等额本金如何计算的 。


计算贷款月份 和 贷款月利率

已知贷款年限为30年,所以贷款月份为: 30 * 12 == 360(月)

贷款月利率,我们就保留小数点后4位就可以了。


贷款年利率为: 5.8% ,所以贷款月利率为: 5.8% / 12 == 0.4833%

每个月偿还的本金为: 30w / 360(月) == 833.33(元)

第一个月偿还的利息为: 30w * 0.4833% == 1449.9

所以第一个月总还款额: 1449.9 + 833.33 == 2283.23

第二个月偿还的本金和第一个月偿还的本金一致,也是833.33,只是偿还的利息不同了。


第二个月偿还的利息: (30w-833.33) * 0.4833% == 1445.96

所以第二个月总还款额: 1445.96 + 833.33 == 2279.29

后面的以此类推


直至最后一个月还款额仅为本金: 833.33

我们再来看看等额本息呢


等额本金较为复杂,这里直接给出计算公式就可以了,如果需要推理过程,可以在网上搜搜看。


image.png

我们带入我们上面的公式

image.png

结果为: x = 1670.18


vue编写


上一步我们已经推导了等额本息 和 等额本息的算法,我们来看下程序应该如何编写呢,我们将按钮绑定一个点击事件,传到方法: getInterestInfo ,我们先要计算出贷款总额、贷款月利率 以及 贷款月数,代码如下:

var aAmount = this.amount * 10000
var aMonInterest = this.interest / 100 / 12
var aMonth = this.years * 12

如上代码,是这样的,我们传入的金额单位是(万),所以需要乘以10000,而传入的利率是年百分利率,所以我们计算月利率,需要先除以100再除以12,传入的是年数,所以我们要计算月数,需要乘以12


我们分别来看下等额本金和等额本息计算方法:

console.log("等额本息")
// 计算方法
var fenzi = aAmount * aMonInterest * Math.pow((1+aMonInterest),aMonth)
var fenmu = Math.pow((1+aMonInterest),aMonth) - 1
var monRepayment = fenzi / fenmu
var sumRepayment = monRepayment * aMonth
console.log("月还款额: " , monRepayment.toFixed(2) , " 总还款额: " , sumRepayment.toFixed(2) , " 总利息: " , (sumRepayment - aAmount).toFixed(2))



如上代码是套用了公式:

image.png


最后的结果保留了2位。

而等额本金,我们计算方法如下:

console.log("等额本金")
// 计算方法
var firstAccrual = (aAmount * aMonInterest).toFixed(2)
var firstRepay =  ((aAmount / aMonth) + (aAmount * aMonInterest)).toFixed(2)
console.log("第一个月还款额: " , firstRepay)
var temp = aAmount
var sum = 0
for(let i=1;i<=aMonth;i++) {
  sum = sum + (aAmount / aMonth) + (temp * aMonInterest)
  temp = temp - (aAmount / aMonth)
}
console.log("总还款额: " , sum.toFixed(2) , "总利息: " , (sum-aAmount).toFixed(2))



如上代码,我们使用的是暴力求解,即: 我们循环贷款月数,而后再来计算每个月的利息,最后加上本金就是本月还款额,而后将每个月的还款数叠加。


不管是等额本金和等额本息,我们计算总利息的方法都是一样的,那就是使用还款总额 减去 借款本金 就是总利息了。


如上还有很多细节没有介绍到,大家可以看源码分析下。



总结


由于篇幅的关系,我们没有过多介绍,而是单独将等额本息和等额本金计算方法拉出来分析了一波,大家如果对其他方面还感兴趣,可以点进文章上面【码上掘金】进行查看。好了,现在知道贷款30年和贷款100年,谁更划算了吧。有意思吧,来,动动小手指,快来试试吧。


相关文章
|
3天前
|
JavaScript
Vue中如何设置在执行删除等危险操作时给用户提示(二次确认后执行对应的操作)
这篇文章介绍了在Vue项目中如何实现执行删除等危险操作时的二次确认机制,使用Element UI的`el-popconfirm`组件来弹出确认框,确保用户在二次确认后才会执行删除操作。
Vue中如何设置在执行删除等危险操作时给用户提示(二次确认后执行对应的操作)
|
3天前
|
JavaScript
如何创建一个Vue项目(手把手教你)
这篇文章是一篇手把手教读者如何创建Vue项目的教程,包括使用管理员身份打开命令行窗口、找到存放项目的位置、通过vue-cli初始化项目、填写项目信息、进入项目目录、启动项目等步骤,并提供了一些常见第三方库的引入方法。
如何创建一个Vue项目(手把手教你)
|
3天前
|
前端开发
StringBoot+Vue实现游客或用户未登录系统前、可以浏览商品等信息、但是不能购买商品或者加入购物车等操作。登录系统显示用户的登录名(源码+讲解)
这篇文章介绍了使用StringBoot+Vue实现用户登录状态判断的方法,包括前端加载用户信息和后端设置session的源码示例。
|
3天前
|
JavaScript
在Vue中使用Avue、配置过程以及实际应用
这篇文章介绍了作者在Vue项目中集成Avue组件库的完整过程,包括安装、配置和实际应用,展示了如何利用Avue实现动态表单和数据展示的功能。
在Vue中使用Avue、配置过程以及实际应用
|
3天前
|
JavaScript
如何在Vue页面中引入img下的图片作为背景图。../的使用
这篇文章介绍了在Vue页面中如何引入`img`目录下的图片作为背景图,提供了两种使用相对路径的方法。第一种是使用`../assets/img/`作为路径引入图片,第二种是使用`../../assets/img/`作为路径。文章还展示了使用这些方法的代码实现和效果展示,并鼓励读者学无止境。
如何在Vue页面中引入img下的图片作为背景图。../的使用
|
3天前
|
JavaScript
如何通过点击商品的信息(图片或者文字)跳转到更加详细的商品信息介绍(前后端分离之Vue实现)
该博客文章介绍了如何在Vue 2框架下实现前后端分离的商品信息展示和详情页跳转,包括排序筛选、详情展示、加入购物车和分享功能。
如何通过点击商品的信息(图片或者文字)跳转到更加详细的商品信息介绍(前后端分离之Vue实现)
|
3天前
|
JavaScript
在Vue中使用Swiper轮播图、同时解决点击轮播图左右切换按钮不生效的问题、同时将轮播图抽离出为一个公共组件
这篇文章介绍了在Vue中如何使用Swiper插件创建轮播图,解决Swiper左右切换按钮不生效的问题,并展示了如何将Swiper轮播图抽离成一个可复用的公共组件,同时提供了详细的安装、配置和优化建议。
在Vue中使用Swiper轮播图、同时解决点击轮播图左右切换按钮不生效的问题、同时将轮播图抽离出为一个公共组件
|
3天前
|
JavaScript
如何查看Vue使用的版本
这篇文章介绍了如何在项目中查看Vue及其相关库的版本信息,比如element-ui和element-china-area-data。要查看Vue的版本,需要查看项目中的`package.json`文件,在`dependencies`部分可以找到Vue的版本号。如果需要查询不同版本的兼容性,可以访问相应的官方文档或资源网站。
|
3天前
|
存储 JavaScript 前端开发
Vue中如何通过三元运算符来展示不同的操作
这篇文章讲述了在Vue中如何使用三元运算符结合v-if指令来根据订单的不同状态展示不同的操作按钮,例如在待发货状态显示退款按钮,在待付款或完成状态显示删除按钮。
|
3天前
|
JavaScript 开发者
在Vue中引入Message,弹窗提示错误信息
这篇文章讲述了在Vue CLI项目中如何处理异常,通过引入Message组件实现弹窗提示错误信息,帮助开发者排查和解决webpack等问题。