上海计算机考试folat怎么小数点后保留两位呀?

发布时间:2024-05-17 18:49 发布:上海旅游网

问题描述:

#include <stdio.h>
void main()
{int n; float x=2.7181;
n=100*x;
x=(int)(x*100+0.5)/100.0;
printf("n=%d\n",n);
printf("x=%f\n",x);
}
答案怎么是x=2.72呀?
我认为x=2.720000呀可答案是2.72

问题解答:

我运行了你的程序 答案是n=271 x=2;
n=100*x=100*2.7181=271.81 因为n为int型 所以n=271。
x=(int)(x*100+0.5)/100
x=2.72,但是加了强制转换类型符号,所以(int)(2.72)就等于2,则x=2。

小数点后保留两位,考虑4舍5入
+ 0.005 -- 考虑4舍5入

x*100+0.5 就是 (x+ 0.005) * 100
先把数扩大100 倍 -- (2.7181 + 0.005) * 100 = 272.31
(int)(x*100+0.5)
然后取整 -- 272
x=(int)(x*100+0.5)/100.0;
再除100。-- 2.72

n=100*x;运行时为:n=(int )(100*2.7181) = 271;
后面,x=(int)(2.7181 * 100 + 0.5)/100.0=(int)(272.31)/100.0=272/100.0=272.00/100.00 = 2.720000

x=(int)(x*100+0.5)/100.0;
x*100+0.5=272.31
转换成int=272
再除100就是2.72

%f 改成%.2f
楼上全疯了
printf("x=%f\n",x);

热点新闻