余skr 2022-12-27 19:47 采纳率: 92.3%
浏览 81
已结题

c语言浮点数相加存在问题

小明过年挣了些压岁钱,他打算把这些钱存到银行。银行存款年利率如下,存的时间越长,每年的利率越高。小明可以按不同的年限存款,请帮小明计算到期后的利息和本金。
1年期3%;
2年期3.3%;
3年期3.8%;
4年期4.0%;
5年及以上4.2%。

输入描述

输入两个数,第一个是存款本金,第二个存款年数。

输出描述

输出到期后的利息和总金额,保留两位小数,具体格式见示例输出。

用例输入 1

100.5 1
用例输出 1

interest=3.02, total=103.52
代码如下

#include<stdio.h>
int main(){
    float b;int n,i;
    float interest,total;
    scanf("%f %d",&b,&n);
    if(n==1) interest=b*0.03;
    else if(n==2) interest=b*2*0.033;
    else if(n==3) interest=b*3*0.038;
    else if(n==4) interest=b*4*0.04;
    else if(n>=5) interest=b*n*0.042;
    total=b+interest;
    printf("interest=%.2f,total=%.2f\n",interest,total);
}

输出结果我不知道为什么我是interest=3.02, total=103.51,
我如果不保留小数结果是interest=3.015000,total=103.514999,
为什么total=b+interest;这种float型相加是这种结果,请帮我解答一下,谢谢

  • 写回答

2条回答 默认 最新

  • |__WhoAmI__| 2022-12-27 19:51
    关注

    浮点数通常是用二进制浮点数来表示的,而二进制浮点数不能精确表示所有的十进制数。所以,当进行浮点数运算时,有时会出现精度误差。

    在代码中,每个利率都是一个小数,比如0.03、0.033等。这些小数都是二进制浮点数,并不能精确表示。所以在计算利息时,会有一定的精度误差。这就是为什么计算出来的利息和总金额有小数点后两位的误差的原因。

    如果想精确计算,可以使用整数进行运算,然后在最后再除以100来得到精确的结果。这样就可以避免浮点数精度误差的问题。

    可以把利率表示成整数,如下所示:

    1年期3%:300
    2年期3.3%:330
    3年期3.8%:380
    4年期4.0%:400
    5年及以上4.2%:420
    

    然后可以把利率和本金全部乘以100,这样就可以使用整数进行运算了。对于1年期的利息,可以这样计算:

    interest = b * n * 300 / 100;
    

    最后可以使用printf函数的"%.2f"格式指示符来输出保留两位小数的结果。例如可以这样输出利息和总金额:

    printf("interest=%.2f, total=%.2f\n", interest / 100.0, (b + interest) / 100.0);
    

    这样就可以输出精确的利息和总金额了。
    望采纳。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月5日
  • 已采纳回答 12月28日
  • 创建了问题 12月27日

悬赏问题

  • ¥15 解决websocket跟c#客户端通信
  • ¥30 Python调用dll文件输出Nan重置dll状态
  • ¥15 浮动div的高度控制问题。
  • ¥66 换电脑后应用程序报错
  • ¥50 array数据同步问题
  • ¥15 pic16F877a单片机的外部触发中断程序仿真失效
  • ¥15 Matlab插值拟合差分微分规划图论
  • ¥15 keil5 target not created
  • ¥15 C/C++数据与算法请教
  • ¥15 怎么找志同道合的伙伴