C - Я рассчитываю амортизацию, и мои результаты неверны

Я пытаюсь рассчитать ежемесячный платеж по кредиту, и это всегда выходит неправильно.

Формула выглядит следующим образом, где я проценты

((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: ежемесячные проценты изменены на годовую процентную ставку / 1200.


person user1892641    schedule 04.03.2013    source источник
comment
Просто совет: поместите конечный .0 к константам, когда вам нужна плавающая запятая, просто чтобы убедиться, что результат тоже с плавающей запятой.   -  person Jite    schedule 04.03.2013


Ответы (3)


Предполагая, что annualInterestRate выражено в процентах, вы должны рассчитать monthlyInterest следующим образом:

double monthlyInterest = pow(1+(double)annualInterestRate / 100, 1/12.0) - 1.0;
person Henrik    schedule 04.03.2013
comment
Где это изменит формулу? - person user1892641; 04.03.2013
comment
@ user1892641 125,0/1200,0/100,0 = 0,0010416...; pow( 1,0125, 1/12,0) - 1,0 = 0,0010357... - person Henrik; 04.03.2013

преобразование

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

to

double monthlyInterest = (double)annualInterestRate / 12.0;

бы сделать свое дело.

вы можете прочитать больше о приоритете операторов в c на http://en.cppreference.com/w/c/language/operator_precedence

person Mahmut Ali ÖZKURAN    schedule 04.03.2013
comment
Я использую невидимую плавающую запятую, поэтому я сохраняю, скажем, 1,25 как 125 и изменяю это обратно, разделив годовую процентную ставку на 1200, чтобы получить ежемесячный процент. - person user1892641; 04.03.2013

Я нашел, что было не так. месячная процентная ставка = годовая процентная ставка / 1200,0 / 100

person user1892641    schedule 04.03.2013