yangtingkun
===========================================================
计算月还款的小过程(一)
===========================================================

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

计算月还款的小过程(二):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

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

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

 

yangtingkun 发表于:2005.04.22 19:04 ::分类: ( ORACLE ) ::阅读:(62538次) :: 评论 (3)
[回复]

基本的财务成本的概念..

年金的计算啊.. 根据利息算出到某个时间点的值相同即可..^_^

jametong 评论于: 2005.04.23 13:06
[回复]

呵呵,以前没有解除过,觉得计算很麻烦。
仔细一研究,发现并不复杂。smile

yangtingkun 评论于: 2005.04.23 14:54
re: 计算月还款的小过程(一) [回复]

There, he came across the "four sights": an old crippled man, a diseased man, a decaying corpse, and finally an ascetic.Tod's Lace Moccasins

ss 评论于: 2012.04.30 15:08

发表评论
标题

在此添加评论
表情符号: smile laughing tongue angry crying sad wassat wink

称呼

邮箱地址(可选)

个人主页(可选)

 authimage


切换风格
新闻聚合
博客日历
文章归档...
最新发表...
最新评论...
最多阅读文章...
最多评论文章...
博客统计...
Blog信息
网站链接...