2014-02-06 205 views
-1

我一直在爲我的C++類開發一個簡單的貸款計算器程序,但我不能爲我的生活找出我要出錯的地方。除計算貸款的總利息外,整個計劃按預期運作。我覺得這裏的答案很簡單,但我看不到它。計算貸款計算器程序總利息的問題(C++)

#include <iostream> 
#include <iomanip> 
#include <cmath> 
using namespace std; 

int main() 
{ 
    int numberOfPayments; 
     double monthlyInterestRate; 
     double Loan; 
     double monthlyPayment; 
     double annualInterestRate; 
     double interestTotal; 
     double loanTotal; 


    cout << "Enter the loan amount (principal) --> "; 
    cin >> Loan; 
    cout << "Enter the YEARLY interest rate as a percentage --> "; 
    cin >> annualInterestRate; 
    cout << "Enter the number of payments --> "; 
    cin >> numberOfPayments; 

    monthlyInterestRate = annualInterestRate/12; 
    monthlyInterestRate = monthlyInterestRate/100; 
    monthlyPayment = (monthlyInterestRate) * pow((1 + monthlyInterestRate), numberOfPayments)/(pow((1 + monthlyInterestRate), numberOfPayments) - 1) * Loan; // Amount of monthly payments 
    loanTotal = (monthlyPayment * numberOfPayments); // Total amount due for loan 
    interestTotal = monthlyInterestRate * numberOfPayments * monthlyPayment; 


    cout << monthlyInterestRate << endl; 
    cout << "Loan Amount:         $" << setw(8) << Loan << endl; 
    cout << "Yearly Interest Rate:       " << setw(8) << annualInterestRate << "%" << endl;   
    cout << "Number of Payments:        " << setw(8) << numberOfPayments << endl; 
    cout << "Monthly Payment:        $" << setw(8) << setprecision(5) << monthlyPayment << endl; 
    cout << "Amount Paid Back:        $" << setw(8) << setprecision(7) << loanTotal << endl; 
    cout << "Interest Paid:         $" << setw(8) << setprecision(5) << interestTotal << endl; 
    cout << "\n\nProgram Over"; 
    cout << "\n\n\nPress Enter to end -->"; 
    cin.ignore(); 
    cin.get(); 
    return 0; 
} 
+0

首先錯誤在那裏:'monthlyInterestRate = annualInterestRate/12;'你複合?什麼類型的「年度」利益呢? – 2014-02-06 21:40:44

+0

我不確定我瞭解你的問題。如果有幫助,它應該使用簡單的興趣。 – user3281514

+0

什麼是印刷,你期望它打印什麼?至少每月付款的計算對我來說很合適。 – TypeIA

回答

0

這是一個數學和編程問題。

的利息計算是錯誤的,通過@ m24p指出,應提高 爲

interestTotal = (numberOfPayments * monthlyPayment) - Loan; // (@dvnrrs) 

但程序應遵循財務計算到每一分錢。 (或任何貨幣單位)。每月付款的初始計算需要四捨五入。每月的利息,付款和餘額都需要四捨五入。那麼最終結果通常與完整的double數學不同。理想情況下,這將在貨幣最低單位完成,以避免重複* 100和/ 100。

憑藉10萬美元的6%和360美元的月付款,總收益達到了0.26美元。
最後一次付款,361月,爲0.45美元。

monthlyPayment = round(monthlyPayment * 100)/100; 
    double RealInterestTotal = 0.0; 
    unsigned Month = 0; 
    while (Loan > 0.0){ 
    Month++; 
    double InterstThisMonth = round(Loan*monthlyInterestRate*100)/100; 
    RealInterestTotal = R(RealInterestTotal + InterstThisMonth); 
    double PaymentOnLoan = R(monthlyPayment - InterstThisMonth); 
    if (PaymentOnLoan > Loan) { 
     PaymentOnLoan = Loan; 
    } 
    Loan = R(Loan - PaymentOnLoan); 
    } 
    cout << "Real Interest Paid:        $" << setw(8) 
      << setprecision(8) << RealInterestTotal << endl; 
    cout << "Months:           " << setw(8) 
      << setprecision(8) << Month << endl; 

爲了解決由@Zac霍蘭德,使用上述round()沒有清楚地示出了2個條件,其中我建議四捨五入應該發生凸起好點:
1)的計算有分數分如monthlyPaymentInterstThisMonth
2)由於代表美元而不是美分的double的典型二進制64屬性,舍入被使用。重新寫信使用函數R(),如果以美分計算,這將是無操作的。

爲了好玩,看到Vancouver Stock Exchange

+0

我可以從個人經驗告訴你,金融機構不會將中間結果轉換爲2位數字。大多數人至少需要4位數字,只能圍繞最終結果。因此,保持雙打直到輸出結果良好,並鼓勵避免舍入錯誤。 –

+0

@Zac Howland有趣 - 我個人的經歷有所不同。問題往往是什麼是一箇中間結果?每月付款通常是一個合同金額,因此不能有一個分數的價值。每月累計的利息直接影響每月餘額。這些我都不會稱之爲中間結果,因爲在那個時候可以償還貸款。無論如何,我建議我們同意財務計劃有涉及四捨五入的內部和法律要求。程序員需要意識到它們存在並相應編碼。 – chux

+0

我同意最後一點。但只是爲了分享我的經驗(無論是從銀行角度還是從加油站會計的角度) - 中間價值就是任何不是最終的金額。因此,每月支付金額是一箇中間值 - 在發票上打印時,它將四捨五入到最接近的一分錢,但在計算中使用時,將以高精度(通常爲4位小數)進行存儲。汽油也是如此:您以每加侖X.YZ99的價格(在美國)購買天然氣。這是爲了防止處理部分加侖時的舍入誤差。 –

0
interestTotal = monthlyInterestRate * numberOfPayments * monthlyPayment; 

這是不正確的。總利息不需要乘以每月付款。你需要一個不同的計算。

這不是一個真正的C++問題,是嗎?

+0

當我刪除該部分的計算,它仍然沒有給我一個正確的輸出。 – user3281514

+0

謝謝,dvnrrs。 @ user3281514 - 當然,你仍然需要做正確的計算。如果您有任何具體問題需要幫助,請告知我們。 – m24p

+0

我想這不是一個C++問題,因爲此外我需要的是如何正確計算總體興趣。我爲我的天真而道歉。 – user3281514

1
interestTotal = monthlyInterestRate * numberOfPayments * monthlyPayment; 

這應該是

interestTotal = (numberOfPayments * monthlyPayment) - Loan; 

numberOfPayments * monthlyPayment爲您提供實際上支付的總金額。你只需要減去你借來的金額(Loan)來找出哪部分是利息。