user2884834
user2884834

Reputation: 129

Monthly payments C program

Need some help with calculating the fixed monthly payment (P) required to fully amortize a loan of L dollars over a term of n months at a monthly interest rate of i. The given formula is: P = L[i(1 + i)n]/[(1 + i)n - 1]. I wrote a code but it didn't calculate Payment. I'm wondering if it is because I use double type together with int (for number of months) or the problem with formula?! Please help.

#include<stdio.h>
#include <math.h>


double calculatePayments(double rate, double loan, int payments);


int main() {

    double principal, i, monthlyP;
    int month;


        printf ("Enter the principal amount: ");
        scanf ("%f", &principal);

        printf ("Enter the interest amount: ");
        scanf ("%f", &i);

        printf ("Enter the term in months: ");
        scanf ("%d", &month);

        monthlyP = calculatePayments (i, principal, month);

        printf ("The monthly payment amount is %.2f: ", monthlyP);
        return 0;
    }


double calculatePayments(double rate, double loan, int payments) {

    double mPayments;
    mPayments = loan*(rate*(1 + rate)*payments)/((1 + rate)*payments - 1);

    return mPayments;
}

Upvotes: 0

Views: 10860

Answers (4)

also_taking_class
also_taking_class

Reputation: 1

Read what dasblinkenlight said. Also,

Fix your declarations and the variables you are using scanf() for.

principal should be loan. month should be payments.

i is okay. You need to calculate the monthly decimal number of the percentage given.

For instance,

interest = (i/100) /12;

Do that before your function call. Then just basically use dasblinkenlight's function at the bottom of your main.

hope you score a "10" ;)

Upvotes: 0

Sergey Kalinichenko
Sergey Kalinichenko

Reputation: 726809

In addition to the need to fix the input (%lf instead of %f for doubles), I think your payment formula is wrong: since the future value of money grows exponentially, the formula should feature raising numbers to a certain power, which it does not.

The correct formula looks as follows (from here):

PMT formula

Since the loan needs to be paid off completely, FV is equal to zero.

Since pow(i+1, n) is used twice, it's a good idea to compute it once, and use the resultant variable in two places. The final version of this computation looks like this:

double calculatePayments(double rate, double loan, int payments) {
    double mul = pow(1+rate, payments);
    return (loan * mul * rate) / (mul - 1);
}

Demo on ideone computes the payment on $100,000 at 0.004% per month for 30 years at $524.67, which is the same value that excel's PMT function returns.

Note : When you enter the rate of 5.6% in your formula and in another calculator, don't forget that your formula takes the rate per month, not per year. Therefore, the rate that you plug into outside calculators must be 12 times what you enter into your calculator (for 5.6% annually you should enter 0.00466666

Upvotes: 1

Jonathan Leffler
Jonathan Leffler

Reputation: 754450

One of the first rules of debugging is to make sure you print the inputs to ensure that the program got the values you expected. It didn't, because you wrote:

scanf ("%f", &principal);

Since principal is a double, the format needs to be "%lf". Repeat for the interest rate. You should also check that the inputs succeeded:

if (scanf("%lf", &principal) != 1)
{
    fprintf(stderr, "Failed to read principal\n");
    return(1);
}

If you'd printed out the input values, you'd have known what was wrong immediately.

Upvotes: 0

chrisaycock
chrisaycock

Reputation: 37928

Your scanf() requests %f format for a double; it should be %lf.

Upvotes: 1

Related Questions