2013-02-20 3 views
0

Я создаю небольшую программу для задания домашней работы. Программа работает правильно, за исключением того, что вычисление неверно.Расчет суммы оплаты автомобиля не производится правильно

Формула Я использую для расчета суммы платежа является:

Оплата = (INTRATE * (1 + INTRATE)^N/((1 + INTRATE)^N-1)) * L

Где «N» - количество платежей, а «L» - основной. Код, который я написал для этого:

monthlyPayment = (intRate * pow ((1 + intRate), numberPayments)/(intRate * pow ((1 +  intRate), numberPayments)-1))*principal; 

Полный код приведен ниже.

#include <iostream> 
#include <string> 
#include <cmath> 
#include <iomanip> 

using namespace std; 

int main() 
{ 
    double principal, intRate, paybackAmount, interestPaid, monthlyPayment; 
    int numberPayments; 

    // Change the panel color. 
    system ("color F0"); 

    cout << "\n"; 
    cout << "This application will calculate your loan amounts." << endl; 
    cout << "Please enter the data below." << endl; 
    cout << "\n"; 

    cout << "Loan Amount: "; 
    cin >> principal; 
    cout << "Monthly Interest Rate: "; 
    cin >> intRate; 
    cout << "Number of Payments: "; 
    cin >> numberPayments; 


    cout << "\n\n\n"; 

    monthlyPayment = (intRate * pow ((1 + intRate), numberPayments)/(intRate *  pow ((1 + intRate), numberPayments)-1))*principal; 
    paybackAmount = monthlyPayment * numberPayments; 

    cout << fixed << setprecision(2) << showpoint << left << setw(24) << "Loan  Amount:" << "$" << setw(11) << right << principal << endl; 
    cout << fixed << setprecision(1) << showpoint<< left << setw(24) << "Monthly  Interest Rate:" << setw(11) << right << intRate << "%" << endl; 
    cout << fixed << setprecision(0) << left << setw(24) << "Number of Payments:"  << setw(12) << right << numberPayments << endl; 
    cout << fixed << setprecision(2) << showpoint<< left << setw(24) << "Monthly  Payment:" << "$" << setw(11) << right << monthlyPayment << endl; 
    cout << fixed << setprecision(2) << showpoint<< left << setw(24) << "Amount  Paid Back:" << "$" << setw(11) << right << paybackAmount << endl; 
    cout << fixed << setprecision(2) << showpoint<< left << setw(24) << "Interest  Paid:" << "$" << right << setw(11) << paybackAmount - principal << "\n\n" << endl; 


    system("pause"); 
} 

Заранее благодарим за помощь!

+1

Это не имеет ничего общего с этой проблемой, но сломать эту привычку 'использованием имен станд; '. Обратитесь к 'cout' как' std :: cout'. Используя квалифицированные имена, вы сэкономите большую боль в будущем. –

+0

@PeteBecker Возможно, каждая (небольшая) программа на C++, которая использует 'std', я когда-либо писал, содержит' using namespace std; '. Это может быть не очень хорошая практика (и совершенно безответственная для крупных проектов), но она действительно делает код красивее. – Dukeling

+0

@ Dukeling - красота в глазах смотрящего. –

ответ

1

Вы умножаете как числитель, так и знаменатель на intRate, когда нужно умножать числитель, согласно вашему уравнению.

Вы также вычитаете 1 из результата второго pow, а не из numberPayments.

(intRate * pow ((1 + intRate), numberPayments)-1) 
//^Why is this here?   Wrong place^

То, что вы на самом деле хотите это:

monthlyPayment = (intRate * pow(1+intRate, numberPayments)/
          pow(1+intRate, numberPayments-1)) * principal; 
+0

Это была непродуманная ошибка. Благодарю. Однако расчет по-прежнему не так? Я получаю ... Сумма кредита: $ 10000,00 Ежемесячная процентная ставка: 1,0% Количество платежей: 36 Ежемесячная плата: $ 10000,00 Сумма окупились: $ 360000,00 Проценты уплаченные: $ 350000,00 –

+0

@KevinSchultz См редактировать , Произошла вторая ошибка. –

+0

@ Loki Astari - Парни благодарны за помощь! Я сделал изменения, но придумал неправильную математику. Теперь я получаю .... Сумма займа: 10000 долларов США.00 Ежемесячная процентная ставка: 1,0% Количество платежей: 36 Ежемесячный платеж: $ 20000,00 Сумма окупились: $ 720000,00 Проценты Выплачено: $ 710000,00 –

0

я думаю, что у вас есть дополнительные INTRATE

`(intRate * pow ((1 +  intRate), numberPayments)-1))*principal;` 
    ^^^^^^^^ 
0

кажется как дополнительный аргумент был поскользнулся в:

((1+intRate)^N-1)) * L => (intRate * pow ((1 + intRate), numberPayments)-1))*principal 
//       ^^^^^^^^^ Look Odd. 

Дополнительно:

(1+intRate)^N-1 

Вы представляете это как:

pow ((1 + intRate), numberPayments)-1 

я сделал бы это по-другому, как:

pow ((1 + intRate), (numberPayments-1)) 
Смежные вопросы