Need Help
Need Help

Reputation: 27

How To Use Decimals Of An Integer

I would like overpay to display overpay as the total amount paid if the result was not rounded. calculateMonths must be an integer which makes this much more difficult. I tried using

double dblCalculateMonths = (double)calculateMonths(principal, annualInterestRate, monthlyPayment);

but it did not work properly. I am not sure how to fix this problem while keeping calculateMonths as an integer. Help would be very much appreciated!

I would like the results to look like this:

** Welcome to the CPSC 1010-S3 Payment Calculator **
Enter the principal amount: 5000.00
Enter the annual interest rate (in %): 15.0
Enter the monthly payment: 100.00
Calculating...
Total # of months needed to pay off: 79
App roximate # of years needed to pay off: 6.6
Total interest paid: $2900.00
Total amount paid: $7900.00
You overpaid: $4.43

But the last line displays as

You overpaid: $100.00

I am not sure how to change this. My list of code is below

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

int calculateMonths(double principal,double annualInterestRate,double monthlyPayment)
{
    double x = ((log(monthlyPayment)-log(monthlyPayment-annualInterestRate/1200.0*principal))/log(annualInterestRate/1200.0+1.0));
    return x;
}

int main()
{
    double principal, annualInterestRate, monthlyPayment;


    printf("** Welcome to the Payment Calculator **\n\n");

    printf("Enter the principal amount:\t\t\t");
    scanf("%lf", &principal);

    printf("Enter the annual interest rate (in%%):\t\t");
    scanf("%lf", &annualInterestRate);

    printf("Enter the monthly payment:\t\t\t");
    scanf("%lf", &monthlyPayment);

    printf("\nCalculating...\n\n");

    double roundedMonths = calculateMonths(principal, annualInterestRate, monthlyPayment)+1;
    printf("Total # of months needed to pay off:\t\t %.0f\n", roundedMonths);

    double years = roundedMonths/12;
    printf("Approcimate # of years needed to pay off: \t %.1f\n", years);

    double amountPaid = roundedMonths * monthlyPayment;
    double interestPaid = amountPaid-principal;

    printf("Total interest paid:\t\t\t\t $%.2f\n", interestPaid);
    printf("Total amount paid:\t\t\t\t $%.2f\n", amountPaid);

    double dblCalculateMonths = (double)calculateMonths(principal, annualInterestRate, monthlyPayment);
    double overpay = amountPaid - dblCalculateMonths*monthlyPayment;
    printf("You overpaid:\t\t\t\t $%.2f\n", overpay);

    printf("%f", dblCalculateMonths);

    printf("\n\n");



    return(0);
}

Upvotes: 0

Views: 92

Answers (1)

Heto
Heto

Reputation: 595

what's the logic in keeping calculateMonths() an integer? make it a double and it should work.

double calculateMonths(double principal,double annualInterestRate,double monthlyPayment)

and make roundedMonths an integer. Also you could add 0.5 to have the right round.

int roundedMonths = calculateMonths(principal, annualInterestRate, monthlyPayment)+0.5;
printf("Total # of months needed to pay off:\t\t %d\n", roundedMonths);

LE: Try this:

int calculateMonths(double principal,double annualInterestRate,double monthlyPayment, double *dblCalculateMonths)
{
    *dblCalculateMonths = ((log(monthlyPayment)-log(monthlyPayment-annualInterestRate/1200.0*principal))/log(annualInterestRate/1200.0+1.0));
    return *dblCalculateMonths;
}

int main()
{
    double principal, annualInterestRate, monthlyPayment, dblCalculateMonths;


    printf("** Welcome to the Payment Calculator **\n\n");

    printf("Enter the principal amount:\t\t\t");
    scanf("%lf", &principal);

    printf("Enter the annual interest rate (in%%):\t\t");
    scanf("%lf", &annualInterestRate);

    printf("Enter the monthly payment:\t\t\t");
    scanf("%lf", &monthlyPayment);

    printf("\nCalculating...\n\n");

    double roundedMonths = calculateMonths(principal, annualInterestRate, monthlyPayment, &dblCalculateMonths)+1;
    printf("Total # of months needed to pay off:\t\t %.0f\n", roundedMonths);

    double years = roundedMonths/12;
    printf("Approcimate # of years needed to pay off: \t %.1f\n", years);

    double amountPaid = roundedMonths * monthlyPayment;
    double interestPaid = amountPaid-principal;

    printf("Total interest paid:\t\t\t\t $%.2f\n", interestPaid);
    printf("Total amount paid:\t\t\t\t $%.2f\n", amountPaid);

    double overpay = amountPaid - dblCalculateMonths*monthlyPayment;
    printf("You overpaid:\t\t\t\t $%.2f\n", overpay);

    printf("%f", dblCalculateMonths);

    printf("\n\n");



    return(0);
}

Upvotes: 1

Related Questions