计算月还款的小过程[转帖]_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3951 | 回复: 0   主题: 计算月还款的小过程[转帖]        下一篇 
wayne
注册用户
等级:中校
经验:1690
发帖:221
精华:0
注册:2011-7-21
状态:离线
发送短消息息给wayne 加好友    发送短消息息给wayne 发消息
发表于: IP:您无权察看 2011-8-16 15:50:07 | [全部帖] [楼主帖] 楼主

今天和一个在银行做贷款的朋友聊了一会,顺便问了一下贷款的计算公式。一时兴起就写了计算的存储过程。

计算月还款的小过程(二):http://blog.itpub.net/post/468/27440

计算月还款的小过程(三):http://blog.itpub.net/post/468/27549

公式:

等额本金还款法:

每月还贷本息额=贷款本金/消费月数+(本金-累计已还本金)×月利率。

(其中当月应还本金=贷款本金/消费月数
   当月应还利息=(本金-累计已还本金)×月利率)

等额本息还款法:
每月应还本息= P×I(1+I)^N/[(1+I)^N-1]

(其中,P为本金,I为月利率,N为期数,

当期应还利息=P ’ ×I=贷款当期帐面本金*月利率

当期应还本金(P ’)=每月应还本息(P×I(1+I)N/[(1+I)N-1])-当期应还利息

代码:

SQL> CREATE OR REPLACE FUNCTION F_PAY_MONTHLY
2  (
3   P_TOTAL IN NUMBER, P_YEARS IN NUMBER, P_RATE_YEAR IN NUMBER DEFAULT 0.0504,
4   P_TYPE NUMBER DEFAULT 1, P_MONTH_RETURN IN NUMBER DEFAULT 1
5  ) RETURN NUMBER AS
6   V_RATE_MONTH NUMBER := P_RATE_YEAR / 12;
7   V_MONTHES NUMBER := P_YEARS * 12;
8  BEGIN
9   IF P_TYPE = 1 THEN
10    RETURN P_TOTAL * V_RATE_MONTH * POWER(1 + V_RATE_MONTH, V_MONTHES)/(POWER(1 + V_RATE_MONTH, V_MONTHES) - 1);
11   ELSE
12    IF P_MONTH_RETURN >  V_MONTHES THEN
13     RETURN 0;
14    END IF;
15    RETURN P_TOTAL/V_MONTHES + (P_TOTAL - P_TOTAL * P_MONTH_RETURN / V_MONTHES)* V_RATE_MONTH;
16   END IF;
17  END;
18  /


函数已创建。

下面简要说明一下:

计算等额本息,20年贷款200000,年利息5.04%,月还款:

SQL> SELECT F_PAY_MONTHLY(200000, 20) FROM DUAL;
F_PAY_MONTHLY(200000,20)
------------------------
1324.33485


计算等额本息,30年贷款400000,年利息5.31%,月还款:

SQL> SELECT F_PAY_MONTHLY(400000, 30, 0.0531) FROM DUAL;
F_PAY_MONTHLY(400000,30,0.0531)
-------------------------------
2223.70326


计算等额本金,15年贷款300000,年利息5.51%,第1、90、180个月分别还款:

SQL> SELECT F_PAY_MONTHLY(300000, 15, 0.0551, 0, 1) FROM DUAL;
F_PAY_MONTHLY(300000,15,0.0551,0,1)
-----------------------------------
3036.51389
SQL> SELECT F_PAY_MONTHLY(300000, 15, 0.0551, 0, 90) FROM DUAL;
F_PAY_MONTHLY(300000,15,0.0551,0,90)
------------------------------------
2355.41667
SQL> SELECT F_PAY_MONTHLY(300000, 15, 0.0551, 0, 180) FROM DUAL;
F_PAY_MONTHLY(300000,15,0.0551,0,180)
-------------------------------------
1666.66667
SQL> SELECT F_PAY_MONTHLY(300000, 15, 0.0551, 0, 181) FROM DUAL;
F_PAY_MONTHLY(300000,15,0.0551,0,181)
-------------------------------------
0


由于时间关系,只是实现了一个最简单的小过程。

过两天会把修改利息和提前还款实现。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论