当我使用“浮点”类型变量时如何输出精确值

问题描述 投票:0回答:1
#include <stdio.h>

int main(void) {
    float interest_rate, amount_of_loan, monthly_payment, remain_payment;

    printf("Enter amount of loan :");
    scanf("%f", &amount_of_loan);
  
    printf("Enter interest rate :");
    scanf("%f", &interest_rate); // this is a interest rate per a year
    printf("Monthly interest rate is : %.1f\n" , (interest_rate / 12)); // 퍼센트를 표현하는 방법 
    ((interest_rate / 12) * 0.01); //it would be 0.005

    printf("Enter monthly payment : ");
    scanf("%f", &monthly_payment);

    remain_payment = (amount_of_loan + (amount_of_loan * ((interest_rate / 12) * 0.01))) - monthly_payment;
    printf("Balance remaining after first payment : %.2f\n", remain_payment);
    // 0.005 is interest value and the payment is 386.66
  
    remain_payment = (remain_payment + (amount_of_loan * ((interest_rate / 12) * 0.01))) - monthly_payment;
    printf("Balance remaining after second payment :%.2f\n", remain_payment);

    remain_payment = (remain_payment + (amount_of_loan * ((interest_rate / 12) * 0.01))) - monthly_payment;
    printf("Balance remaining after third payment :%.2f\n", remain_payment);
    return 0;
}

我必须使用

floor
函数的向下舍入函数吗?

我在

<math.h>
文件中搜索了向上和向下舍入函数,但我无法得到确切的结果我想我知道为什么我无法得到确切的答案,我猜的原因是 float 类型存储我的输入大约。

但我想得到我想要的精确输出

c floating-point floor rounding-error
1个回答
0
投票

您遇到了有时被称为复制和粘贴错误的教科书示例。

你先写了

remain_payment = (amount_of_loan + (amount_of_loan * ((interest_rate / 12) * 0.01))) - monthly_payment;

准确计算出第一次付款后的余额

但是你试图通过写作来计算第二笔付款

remain_payment = (remain_payment + (amount_of_loan * ((interest_rate / 12) * 0.01))) - monthly_payment;

但是您应该根据之前的运行余额来计算下一次剩余付款。原贷款金额不计入。您将

amount_of_loan
的一个实例更改为
remain_payment
,但您应该同时更改两者。

© www.soinside.com 2019 - 2024. All rights reserved.