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

3 ответа

Если предположить, annualInterestRate в процентах, то вы должны рассчитать monthlyInterest как это:

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

Я нашел, что было не так. monthInterest = yearInterestRate / 1200.0 / 100

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

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

в

double monthlyInterest = (double)annualInterestRate / 12.0;

сделал бы трюк.

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

Другие вопросы по тегам