연이율에 따른 일복리이율 및 원리금 계산 0 20 11,078

by 손님 복리이율 [2010.02.23 20:14:18]



안녕하세요. 이번 문제는 일복리이율 및 원리금 계산 문제입니다.

아래의 연이율정보를 보시면 분기마다 변하는 연이율에 대한 일복리이율을 구하는것과 그날의 원리금(원금+이자)를 구하시면 됩니다. (편의상 1년=365일로 계산합니다.)

- 연이율정보
with t as
(
select to_date('20100101','yyyymmdd') dt, 3.5 yrt from dual union all
select to_date('20100401','yyyymmdd') dt, 4 yrt from dual union all
select to_date('20100701','yyyymmdd') dt, 4.4 yrt from dual union all
select to_date('20101001','yyyymmdd') dt, 4.5 yrt from dual
)

- 결과값

 

일자 연이율(%) 일복리이율(%) 원리금
2010-01-01 3.5 0.009425493 500.0471275
2010-01-02 3.5 0.009425493 500.0942594
2010-01-03 3.5 0.009425493 500.1413957
2010-01-04 3.5 0.009425493 500.1885365
2010-01-05 3.5 0.009425493 500.2356817
2010-01-06 3.5 0.009425493 500.2828314
2010-01-07 3.5 0.009425493 500.3299855
2010-01-08 3.5 0.009425493 500.3771441
2010-01-09 3.5 0.009425493 500.4243071
2010-01-10 3.5 0.009425493 500.4714746
………….
2010-04-01 4 0.010745978 504.3134987
2010-04-02 4 0.010745978 504.3676922
2010-04-03 4 0.010745978 504.4218914
2010-04-04 4 0.010745978 504.4760965
2010-04-05 4 0.010745978 504.5303074
2010-04-06 4 0.010745978 504.5845241
2010-04-07 4 0.010745978 504.6387466
2010-04-08 4 0.010745978 504.692975
2010-04-09 4 0.010745978 504.7472092
2010-04-10 4 0.010745978 504.8014492
………….
2010-07-01 4.4 0.011797816 509.2743798
2010-07-02 4.4 0.011797816 509.3344631
2010-07-03 4.4 0.011797816 509.3945534
2010-07-04 4.4 0.011797816 509.4546509
2010-07-05 4.4 0.011797816 509.5147554
2010-07-06 4.4 0.011797816 509.574867
2010-07-07 4.4 0.011797816 509.6349857
2010-07-08 4.4 0.011797816 509.6951115
2010-07-09 4.4 0.011797816 509.7552444
2010-07-10 4.4 0.011797816 509.8153844
………….
2010-10-01 4.5 0.012060148 514.8331676
2010-10-02 4.5 0.012060148 514.8952572
2010-10-03 4.5 0.012060148 514.9573544
2010-10-04 4.5 0.012060148 515.019459
2010-10-05 4.5 0.012060148 515.0815711
2010-10-06 4.5 0.012060148 515.1436907
2010-10-07 4.5 0.012060148 515.2058178
2010-10-08 4.5 0.012060148 515.2679524
2010-10-09 4.5 0.012060148 515.3300944
2010-10-10 4.5 0.012060148 515.392244
………….
2010-12-30 4.5 0.012060148 520.4513315
2010-12-31 4.5 0.012060148 520.5140987


일복리이율 : 해당 연이율에 대한 해당일의 복리이율
원리금 : 500에 대한 그날의 복리이율을 적용한 원금 + 이자

답은 이번주말에 올리겠습니다. 수고하세요.

 

by 서성우 [2010.02.24 14:19:28]
with t as
(
select to_date('20100101','yyyymmdd') dt, 3.5 yrt from dual union all
select to_date('20100401','yyyymmdd') dt, 4 yrt from dual union all
select to_date('20100701','yyyymmdd') dt, 4.4 yrt from dual union all
select to_date('20101001','yyyymmdd') dt, 4.5 yrt from dual
)
SELECT DT,
yrt,
grp,
bill,
To_Char((BILL * Nvl(Max(Decode(grp,1,(Power(1+(yrt/100),ro)))) over(ORDER BY dt),1)) *
Nvl(Max(Decode(grp,2,(Power(1+(yrt/100),ro)))) over(ORDER BY dt),1) *
Nvl(Max(Decode(grp,3,(Power(1+(yrt/100),ro)))) over(ORDER BY dt),1) *
Nvl(Max(Decode(grp,4,(Power(1+(yrt/100),ro)))) over(ORDER BY dt),1),'999,999.0000000') e
FROM (SELECT dt ,
To_Char(Sum(yrt) over(PARTITION BY grp)/365,'FM0.000000000') yrt ,
grp,
bill,
Row_Number() over(PARTITION BY grp ORDER BY dt) ro
FROM (SELECT Nvl(a.dt,b.dt) dt,
yrt ,
Sum(Decode(yrt,'',0,1)) over (ORDER BY Nvl(a.dt,b.dt)) grp,
500 bill
FROM (SELECT dt
,yrt
FROM t) a, (SELECT To_Date('20100101') + (LEVEL - 1) dt
FROM dual
CONNECT BY LEVEL <= 365) b
WHERE a.dt(+) = b.dt)
)

일복리이율을 yrt / 365로 구했는데 위의 결과 값의
이율과 차이가 있는 건 왜 그런건지 잘모르겠네요...
decode문을 사용하여 위의 이율로 수정해서
돌렸을때 위의 결과 값과 일치하는 것으로 봐서는
수식에는 문제 없는 것 같습니다.
상당히 어거지로 풀어 낸것 같아서
민망스럽네요.. .ㅠ.ㅠ

by . [2010.02.24 19:03:18]
yrt / 365로 계산하면 복리이율이 아니라 단리이율로 구해지게 됩니다.

단리로 계산했을때
select 500 * power(1+9.58904109589041E-5,365)
from dual

연이율은 3.5%가 아닌 약 3.5618%로 나오게 됩니다.
연이율 3.5라고 가정했을때 일복리이율은
x^365 = 3.5% ==> 365√3.5% = x 입니다.

즉 yrt / 365가 아니라 365√yrt라는 거죠..

by 식객 [2010.02.24 23:00:29]
과연 그럴까요?

by 마농 [2010.02.25 11:13:54]
3.5/365 가 맞을것 같습니다.
위와 같은 방식으로 이율을 차감해 버린다면 결국 단리와 복리의 차이가 거의 없습니다.
복리를 가장한 단리라고 할수밖에 없을듯 한데요.

by 식객 [2010.02.25 12:46:28]
3.5/365 는 아닙니다.
서성우님의 쿼리도 맞지 않죠.
아시다시피, 이 문제를 계산하는 간단한 수식이 존재합니다.
수식만 알면 아주 간단한 쿼리 문제가 되겠죠.

by 식객 [2010.02.25 13:00:29]
그리고 예상컨대, 문제에 나온 결과 데이터는 엑셀에서 만들었을 것이기 때문에,
쿼리로 나온 결과와 소숫점 뒤의 몇자리에서 불일치 하는 현상을 보일 겁니다.

by 마농 [2010.02.25 13:20:38]
단리든 복리든 이율은 어짜피 같고 원금을 산정하는 방법만 다른것 아닌가요?

by 서성우 [2010.02.25 13:33:23]
저도 마농님과 같은 생각으로
단리든 복리든 어차피 일이율은 똑같고
원금에서 복리로 계산을 하느냐 단리로 계산을
하느냐에 따라서 구분을 하는 것으로 생각해서
처리 한 것입니다만....
그게 아닌건가요?

by 식객 [2010.02.25 13:36:03]
위의 결과 데이터에 보이는 것처럼, 연(=365일)이율이 3.5(%) 일 경우,

일단리이율(%) = 약 0.009589041
일복리이율(%) = 약 0.009425493

두가지는 다릅니다.

by 서성우 [2010.02.25 13:46:24]
그렇다면 일복리이율을
구하는 공식이 있다면 알수 있을까요?

by 마농 [2010.02.25 13:51:56]
식객님의 말씀대로라면 결국 12월31일의 원금+이자 총액은 단리와 복리가 같습니다.(약간의 오차는 있겠죠)
결국 복리가 복리가 아니란 얘기죠.
이건 일복리가 아니라 연복리를 일일계산으로 환산한것 뿐이란 생각이 듭니다.
일복리와는 개념이 다른것이라고 생각되네요.

by 식객 [2010.02.25 14:38:30]
마농님의 얘기를 이해하겠습니다.

이 경우엔 복리가 복리가 아니죠. 당연합니다.
단위시간(1년)만 고려했기 때문이죠.
복리가 위력을 발휘하는 때는, 단위시간이 지나면서 부터죠.

어쨌거나, 이 경우에는 일복리이율(일일계산 이건 무엇이건)을 구해야 하고,
일복리이율은 일단리이율과 다릅니다.

그리고 이 경우에는 12월31일의 원리금도 다릅니다.
오히려 단리인 경우에 원리금이 더 크죠.

(아... 근데 제가 왜 이걸 설명하고 있는지... 저는 문제 출제자는 아닙니다.)

by . [2010.02.25 15:19:22]
흠... 위에서 일복리이율 구하는건 이미 얘기했습니다...

원금을 1이라 가정하고 연이율 4%일때 1년후의 원리금은 1.04가 될겁니다.
그 공식은 일복리이율(x) (1+x)^365 = 1.04 ==> (1+x) = 365√1.04 입니다.

by . [2010.02.25 15:22:17]
문제 설명이 약간 미흡한거 같군요..
그날의 원리금(원금+이자) * 일복리이율 = 원금 * 연이율 입니다.

by 마농 [2010.02.25 15:24:07]
일단 뭐가 맞다고 단정지을수 있는 문제가 아니네요. 바라보는 관점 자체가 틀린 경우라서요.
실생활에서 적용되고 있는 복리의 개념으로 봤을때 위 퀴즈 예시는 좀 아닌듯 하다고 판단해서요.

by 식객 [2010.02.25 15:39:59]
실생활에서 이렇게 일복리를 적용하는 경우는 별로 없을 겁니다.
그런데 금융권 업무에서는 시뮬레이션을 할 경우, 여러가지 경우를 고려해서 계산하고 있는 걸로 알고 있습니다.
제시된 문제가 그 가운데 하나일 수도 있습니다.

아마 이 문제는 금융권에서 빈번히 계산해야 하는 일상적인 문제일 겁니다.

by 마농 [2010.02.25 16:00:28]
저는 Model 절을 이용해서 풀어봤습니다.

WITH t AS
(
SELECT TO_DATE('20100101','yyyymmdd') dt, 3.5 yrt FROM dual
UNION ALL SELECT TO_DATE('20100401','yyyymmdd'), 4 yrt FROM dual
UNION ALL SELECT TO_DATE('20100701','yyyymmdd'), 4.4 yrt FROM dual
UNION ALL SELECT TO_DATE('20101001','yyyymmdd'), 4.5 yrt FROM dual
)
, tmp AS
(
SELECT b.dt, a.yrt, a.drt
FROM
(
SELECT dt sdt
, LEAD(dt,1,TO_DATE('201101','yyyymm')) OVER(ORDER BY dt) - 1 edt
, yrt
, ROUND(EXP(LN(POWER(1 + yrt/100, 1/365))) - 1, 11) * 100 drt
FROM t
) a
,
(
SELECT TO_DATE('201001','yyyymm') + LEVEL - 1 dt
FROM dual CONNECT BY LEVEL <= TO_CHAR(TO_DATE('20101231','yyyymmdd'),'ddd')
) b
WHERE b.dt BETWEEN a.sdt AND a.edt
)
SELECT dt, yrt, drt, TRUNC(amt, 7) amt
FROM tmp
MODEL
DIMENSION BY (dt)
MEASURES (yrt, drt, 0 amt)
RULES(amt[ANY] = NVL(amt[CV()-1], 500) * (1 + drt[CV()]/100))
;

by . [2010.02.25 20:07:35]
model로도 나오는군요. 마농님 정답입니다.

그리고 실생활에서 일복리 적용하는게 다른가요?
아니면 단리와 복리를 혼돈하고 있는건지 잘 모르겠네요..

by 마농 [2010.02.25 21:48:30]
월복리 6% 이율로 계산한다면 매월 0.5%의 이율로 이자가 붙는걸로 알고 있습니다.
위에서 일복리라는 말이 나오길래 저는 같은 개념으로 생각한거죠.
월 대신 일 기준인걸로요.
하지만 출제된 문제를 보니 그게 아니고 연복리 기준을 가지고 일단위로 역산하는 문제인 모양이네요.
복리에 대해 제가 잘 모르고 있었던 것은 사실입니다.

by . [2010.02.26 12:46:47]
네 마농님 말씀이 맞습니다.
문제를 채권의 할인채 개념에다가 복리계산을 더했더니 이해하기가 어려우셨나봅니다..--
다음부턴 이해하기 쉬운걸로 내겠습니다.

답은 답급로 달았습니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입