2013-03-04 52 views
1

我正在計算貸款的每月付款並且總是出錯。C - 我正在計算攤還額和我的結果關閉

公式如下:其中i是利益

((1 + i)^months/
(1 + i)^months - 1) 
* principal * i 

假設年利率和本金是一種無形的浮點,你能告訴我什麼地方錯了我的公式?

double calculatePaymentAmount(int annualInterestRate, 
    int loanSize,       
    int numberOfPayments; 
{ 
double monthlyInterest = annualInterestRate/1200.0; 
return 
    (
     pow(1 + monthlyInterest, numberOfPayments)/
     (pow(1 + monthlyInterest, numberOfPayments) - 1) 
    ) 
    * (loanSize/100) 
    * monthlyInterest; 
} 

例如:1.25的利率和250的12個月貸款規模提供了22.27,而不是20.97。

預先感謝您。

編輯1:變更每月利息annualInterestRate/1200

+0

另外還有一個提示:當你想要浮點時,將一個尾隨的'.0'放在常量上,以確保結果也是浮點數。 – Jite 2013-03-04 13:28:43

回答

0

轉換

double monthlyInterest = (double)annualInterestRate/
    1200/100; 

double monthlyInterest = (double)annualInterestRate/12.0; 

會做的伎倆。

你可以從http://en.cppreference.com/w/c/language/operator_precedence

+0

我使用隱形浮點數,所以我將1.25表示爲125,然後將yearInterestRate除以1200得到月度利息。 – user1892641 2013-03-04 13:46:03

0

假設annualInterestRate是%,那麼你應該計算monthlyInterest這樣閱讀更多關於運算符優先級在C:

double monthlyInterest = pow(1+(double)annualInterestRate/100, 1/12.0) - 1.0; 
+0

哪裏會改變公式? – user1892641 2013-03-04 13:38:01

+0

@ user1892641 125.0/1200.0/100.0 = 0.0010416 ...; pow(1.0125,1/12.0) - 1.0 = 0.0010357 ... – Henrik 2013-03-04 14:13:36

0

我發現了什麼是錯誤的。 monthlyInterest = annualInterestRate/1200.0/100