C语言 四舍五入

设变量x为float型且已赋值,则以下语句中能将x中的数值保留到小数点后两位,并将第三位四舍五入的是
A. x=x*100+0.5/100.0;
B. x=(x*100+0.5)/100.0;
C. x=(int)(x*100+0.5)/100.0;
D. x=(x/100+0.5)*100.0;
四舍五入是怎样的情况?能否分析一下

# incloud <stdio>

int main(void)

{

float a ;

scanf(“%f”,&a);

a=(int)(a*1000+0.5)/1000.0;

printf (“%0.3f”,a);

return 0;

}

扩展资料

其他方法实现四舍五入:

int myround(double indata,int precision,double * outdata)

long pre = 1,i;

for(i = 0; i <precision; i ++)pre = pre * 10;

if(cy_FloatCompare(indata,0.00)> 0)

* outdata =(int)((indata * pre)+0.5)/100.00;

else  

* outdata =(int)((indata * pre)-0.5)/100.00;

return 0;


// cy_FloatCompare是浮点数与0比较的函数,假设它存在。返回值与strcmp相同。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-03-20
C,

(int)(x*100+0.5)中x*100就把小数点后两位移到整数部分了,然后强制转换为int,再除以float,所以结果为小数点后两位,其他也可以,不过不是保留两位小数。

你假设x=123.456
x*100+0.5=12345.6+0.5=12346.1//这里加0.5是为了4舌5入
然后强制转化成int 为12346
再除以100
结果 为 123.46

这样就做到了保留到小数点后两位,并将第3位四舍五入本回答被提问者采纳
第2个回答  2008-03-20
C

x先扩大100倍,把小数点后第三位移到小数点后1位再与0.5相加,再强制转换成int功能是去掉小数,既是把原数的小数点两位后的数字都去掉了,再除以100.0就还原啦
第3个回答  2008-03-20
选C。
其中int的作用把无需保留的全部扔掉,最后的除以100实际上是在移动小数点两位。

还有什么疑问吗?请补充。