转眼即逝706 2022-10-13 23:34 采纳率: 75%
浏览 53
已结题

在Dev-C++ 5.11上同一种写法,一个数据四舍五入了,一个没有四舍五入,为什么会这样呀

在Dev-C++ 5.11上同一种写法,一个数据四舍五入了,一个没有四舍五入,为什么会这样呀

#include <stdio.h>
#define PI 3.14
int main()
{
double r,h;
scanf("%lf %lf",&r,&h);
printf("C1=%.2f\n",PI2r);
printf("Sa=%.4f\n",PIrr);
printf("Sb=%.2f\n",PIrr4);
printf("Va=%.2f\n",PI
rrr4/3);
printf("Vb=%.4f\n",PI
rrh);
return 0;
}
输入1.5 3
输出为
C1=9.42
Sa=7.0650
Sb=28.26
Va=14.13
Vb=21.1950

#include <stdio.h>
#define PI 3.14
int main()
{
double r,h;
scanf("%lf %lf",&r,&h);
printf("C1=%.2f\n",PI2r);
printf("Sa=%.2f\n",PIrr); //这里不同,4改为了2
printf("Sb=%.2f\n",PIrr4);
printf("Va=%.2f\n",PI
rrr4/3);
printf("Vb=%.2f\n",PI
rrh); //这里也不同,4也改为了2
return 0;
}
输入1.5 3
输出为
C1=9.42
Sa=7.06 //这里没有四舍五入
Sb=28.26
Va=14.13
Vb=21.20 //这里四舍五入了

  • 写回答

3条回答 默认 最新

  • _GX_ 2022-10-14 02:37
    关注

    因为浮点数在内存里二进制表示是有截断误差的,如下图,3.14用double类型表示实际上是3.1400000000000001,而PI * r * r的计算结果是7.0649999999999995,按四舍五入保留两位小数就得到7.06(相应的误差范围是±0.005)

    img

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

报告相同问题?

问题事件

  • 系统已结题 11月7日
  • 已采纳回答 10月30日
  • 创建了问题 10月13日

悬赏问题

  • ¥15 使用Java milo连接Kepserver服务端报错?
  • ¥15 用ADS设计一款的射频功率放大器
  • ¥15 怎么求交点连线的理论解?
  • ¥20 软件开发方法学习来了
  • ¥15 微信小程序商城如何实现多商户收款 平台分润抽成
  • ¥15 HC32L176调试了一个通过TIMER5+DMA驱动WS2812B
  • ¥15 cocos的js代码调用wx.createUseInfoButton问题!
  • ¥15 关于自相关函数法和周期图法实现对随机信号的功率谱估计的matlab程序运行的问题,请各位专家解答!
  • ¥15 Python程序,深度学习,有偿私
  • ¥15 扫描枪扫条形码出现问题