永发信息网

请问c语言如何实现四舍五入?

答案:3  悬赏:80  手机版
解决时间 2021-03-23 18:59
  • 提问者网友:星軌
  • 2021-03-23 15:27
编写程序,读入3 个双精度数,求它们的平均值并保留此 平均值小数点后一位数,对小数点后第二 位数进行四舍五入,最后输出结果。
最佳答案
  • 五星知识达人网友:長槍戰八方
  • 2021-03-23 15:48
double a,b,c;
scanf("%lf",&a);
scanf("%lf",&b);
scanf("%lf",&c);
printf("%.1lf",(a+b+c)/3+0.05);
全部回答
  • 1楼网友:独钓一江月
  • 2021-03-23 17:42

为什么 329.835 会变成 329.83,529.835 会变成 529.84,就是因为在内存中的数字是用二进制表示的,不可能准确表达十进制小数后三个位,刚好 329.835 在内存中相当于 329.83499...,不足 329.835,就会出现这个情况。

 

int((a*1000+5)*0.001) 的意思是取小数后两个位,但是 basic 语言的语法,不是 c 语言的语法,而且也犯了一个错误,乘 0.001 以后才 int,不是把小数后所有数字都去掉了吗?应该是:int(a*100+0.5) * 0.01,不要外面的括号,并且是在乘以 100 倍的时候取整型。按照 c 语言的语法,应该写成:

(int) (a*100+0.5) * 0.01

(int) 是类型转换运算符。但是 int 只到 32767,安全一点,应该用:

(long) (a*100 + 0.5) * 0.01

 

不过,这个并不能解决 329.835 相当于 329.83499... 的问题。比较保险的解决方法,第一,把所有的值赋值给 double 型变量,不要用 float,第二,不用 0.5,而是改用 0.50001 这类的数字,把 0.49999 一类的数字纠正过来:

(long) (a*100 + 0.50001) * 0.01

0.50001 中间要加多少个 0 效果才最理想,就要看实际数据了。

  • 2楼网友:白昼之月
  • 2021-03-23 16:04
我只写一句: float arv=0; printf("%.1f",arv);
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯