如何使用整数的小数

时间:2015-10-06 20:43:45

标签: c integer double decimal

如果结果没有舍入,我想多付一次显示支付的总金额。 calculateMonths必须是一个整数,这使得这更加困难。我尝试使用

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

但它无法正常工作。我不确定如何在将calculateMonths保持为整数的同时解决此问题。非常感谢帮助!

我希望结果如下:

** 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

但最后一行显示为

You overpaid: $100.00

我不知道如何改变这一点。我的代码列表在

下面
#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);
}

1 个答案:

答案 0 :(得分:1)

将calculateMonths()保持为整数的逻辑是什么?把它变成双重它应该有用。

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

并将roundedMonths设为整数。你也可以加0.5来得到正确的回合。

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

LE:试试这个:

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);
}