看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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)