Bluasul
Bluasul

Reputation: 325

C++ Why is this outputting the wrong compound interest?

I've been trying to figure this out for sometime and I think it has something to do with the values I'm using for the calculations. I'm not exactly familiar with compound interest so I'm not sure were I'm going wrong. Any help would be appreciated.

#include <iostream>
#include <cmath>
using namespace std;

double interest_credit_card(double initial_balance, double interest_rate, int payment_months);
// Calculates interest on a credit card account according to initial balance,
//interest rate, and number of payment months.

int main ()
{
  double initial_balance, interest_rate;
  int payment_months;
  char answer;

  do
    {

      cout << "Enter your initial balace: \n";
      cin >> initial_balance;
      cout << "For how many months will you be making payments?\n";
      cin >> payment_months;
      cout << "What is your interest rate (as a percent)?: %\n"; 
      cin >> interest_rate;
      cout << endl;

      cout << "You will be paying: $ " <<  interest_credit_card( initial_balance,  interest_rate,  payment_months) << endl;

      cout << "Would you like to try again? (Y/N)\n";
      cin >> answer;

    }while (answer == 'Y' || answer == 'y');

  cout << "Good-Bye.\n";

  return 0;
}

double interest_credit_card(double initial_balance, double interest_rate, int payment_months)
{
  double compound_interest, compounding, compounding2, compounding3, compounding4;

  while(payment_months > 0)
    {
      initial_balance  = initial_balance + (initial_balance * interest_rate/100.0);
      compounding =  (interest_rate /12);
      compounding2 = compounding + 1;
      compounding3 = interest_rate * (payment_months/12);
      compounding4 = pow(compounding2, compounding3);
      compound_interest = initial_balance * compounding4;

      initial_balance = initial_balance + compound_interest;

      payment_months--;
    }

  return initial_balance;
}  

Inputs and expected outputs:

Enter your initial balance: 1000
For how many months will you be making payments?: 7
What is your interest rate (as a percent)?: 9
You will be paying: $1053.70

Upvotes: 0

Views: 89

Answers (1)

Rob L
Rob L

Reputation: 2530

It looks like you were trying a bunch of things and then left them in. The first solution you tried was almost right, you just forgot "/12":

double interest_credit_card(double initial_balance, double interest_rate, int payment_months)
{
    while (payment_months > 0)
    {
        initial_balance = initial_balance + (initial_balance * interest_rate / 100.0/12);

        payment_months--;
    }

    return initial_balance;
}

With a little better style:

double interest_credit_card(double initial_balance, double interest_rate, int payment_months)
{
    double total_payment = initial_balance;
    double monthly_rate = interest_rate / 100.0 / 12;
    for (int month = 1; month <= payment_months; ++month)
        total_payment += total_payment * monthly_rate;

    return total_payment;
}

Upvotes: 1

Related Questions