C语言中的if循环问题及数学函数

img

img


为什么输出的还款额不对呢,找不到哪里错了,还款额的公式太复杂了吗是因为

应该是因为rate的数据类型不对,改为float类型或double即可,因为月利率变量rate那里输入了小数,所以需要改为浮点数数据类型,修改如下:


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

int main(void){
    
    int loan,year,month;
    float rate;
    float money;
    printf("请输入贷款本金:loan\n");
    scanf("%d",&loan);
    getchar();
    printf("请输入月利率:rate\n");
    scanf("%f",&rate);
    printf("还款年限\t月还款额\n");
    for(year=5;year<=30;year++){
        month = year*12;
        money= (   (float)loan  *  (float)rate  * pow((1.0+(double)rate),(double)month)   )  /  (( pow(1.0+(double)rate,(double)month)-1) );
        //money= (float) (   (float)loan  *  (float)rate  *  (float)pow((1.0+(double)rate),(double)month)   )  /  ((float)( pow(1.0+(double)rate,(double)month)-1) );
        printf("%d\t%.0f\n",year,money);
    }
    return 0;
}

img

rate 应该为浮点数,但代码中定义的为long int 整形。