作者peterkot (偉仔)
看板C_and_CPP
標題[問題] C++編寫貸款償還的問題
時間Fri Apr 15 23:02:15 2011
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
dev C
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
no
問題(Question):
第一個本金餘額應為本金減去付款金額,但程式顯示結果卻加入了利息金額導致錯誤
餵入的資料(Input):
寫一程式產生一個包含客製化貸款分期償還表格的檔案,
程式中將提是使用者輸入貸款金額、年利率以及付款期數(n)。
為了計算每月付款金額,將會用到付款金額=iP/(1-(1+i)^(-n)的公式。
此付款金額必須予以四捨五入至最接近的分(0.1元)。
在付款金額四捨五入到分時,程式將在輸出檔案內寫入n行,顯示該如何償付貸款。
每個月的付款金額是本金結餘得月利率,其餘的則為本金部分。
由於付款金額和每月利息都經過四捨五入,
所以必須計算最後利息付款和最後本金結餘的總和。
下面是以9%年利率借款$1000美元,並分攤在6個月償還的範例表格。
P=本金(貸款的金額)
i=每月利率(年利率的1/12)
n=總付款次數
本金 $1000.00 付款 $171.0
年利率 9.0% 期數 6個月
預期的正確結果(Expected Output):
付款結餘 利息 付款金額 本金結餘
1 7.50 163.57 836.43
2 6.27 164.80 671.63
3 5.04 166.03 505.60
4 3.79 167.28 338.32
5 2.54 168.53 169.79
6 1.27 169.79 0.00
最後付款 $171.06
錯誤結果(Wrong Output):
付款結餘 利息 付款金額 本金結餘
1 7.50 171.069 828.931
2 6.217 169.535 659.396
3 4.945 167.951 491.445
4 3.685 166.278 325.166
5 2.439 164.415 160.752
6 1.206 161.958 -1.2056
(以上數據皆有四捨五入)
程式碼(Code):(請善用置底文網頁, 記得排版)
#include<iostream>
#include <math.h>
using namespace std;
void cal(float p,float i,float n){
float out = 163.57; //付款金額
float rate = 0; //利息
while(n>0){
out = (i*p)/(1-pow((1+i),(-n)))+p*0.0075;
rate = p*0.0075;
p = p-out;
cout << "付款金額" << out <<" " ;
cout <<" ";
cout << "本金結餘"<< p <<" " ;
cout <<" ";
cout << "利息"<< rate <<" " ;
cout <<"\n";
//p = p-out;
n--;
}
}
int main(int argc, char *argv[])
{
float i =0;
cal(1000,0.0075,6);
//i = pow(2,3);
//cout << i;
cin >> i;
}
/*
輸入貸款金額、年利率以及付款期數(n)。為了計算每月付款金額,將會用到付款金額=iP/(1-(1+i)^(-n)的公式。
P=本金(貸款的金額)
i=每月利率(年利率的1/12)
n=總付款次數
iP/(1-pow(1+i),(-n) )
*/
補充說明(Supplement):
有需要請板友隨時不吝賜教
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.127.75.131
→ loveme00835:雖然還沒看, 請問最後是怎麼解決的呢? 04/15 23:29
→ loveme00835:你修文的時候可以把上次的修文紀錄刪掉, 比較乾淨 04/15 23:29
out = (i*p)/(1-pow((1+i),(-n)))
改成
out = (i*p)/(1-pow((1+i),(-n)))-p*0.075
※ 編輯: peterkot 來自: 140.127.75.131 (04/15 23:31)