C程序显示错误的结果

时间:2015-10-07 16:02:24

标签: c math

我写了一个计算你需要支付的金额的程序。用户输入他们的本金金额,利率和时间段,然后程序给他们将来必须支付的金额。当我运行程序时,最终结果或我需要支付的金额太大或不正确。这是代码:

#include <stdio.h>
int calculation_1(int principal, int rate, int years);

int main(void) {

    int amount1, amount3;
    double amount2, total;

    printf("Investement Calculator \n");
    printf("====================== \n");

    printf("Principal : ");
    scanf("%d", &amount1);

    printf("Annual Rate: ");
    scanf("%lf", &amount2);

    printf("No of Years: ");
    scanf("%d", &amount3);

    total = calculation_1(amount1, amount2, amount3);

    printf("The future value is: $%.2f \n", total);

    return 0;
}

int calculation_1(int principal, int rate, int years) {

    double subtotal,final;

    subtotal = principal * (1 + rate) * years;

    return subtotal;
}

我测试了这些值:1000为校长,0.06为速率,5年为无年。最终结果应该是$ 1338.23,但我得到$ 5000.00。这是我用来计算金额的公式:

total = principal * (1 + rate) ^number of years.

我无法弄清楚我做错了什么。

2 个答案:

答案 0 :(得分:4)

您的公式没有正确指定:

subtotal = principal * (1 + rate) * years;

应该是

subtotal = principal * pow((1 + rate),years);

另请参阅另一个答案(@ameycu)..您的数据类型不匹配。

答案 1 :(得分:2)

int calculation_1(int principal, int rate, int years) //change 2nd parameter type to double

函数需要2个参数作为int类型,并在调用double时将main传递给它 -

total = calculation_1(amount1, amount2, amount3);
   /*  amount2 is declared as double */ 

因此,由于amount2中的这一部分部分将被丢弃,这可能导致错误答案。

你需要使用函数pow在公式中使用,以便在数学公式中得到这个表达式: