2013-03-04 51 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