C语言中的保留两位小数四舍五入的问题

#include <stdio.h>
double fun ( float h )
{ return (long)( h * 100 + 0.5 )/ 100.0;
}main( )
{ float a;
printf ("Enter a: "); scanf ( "%f", &a );
printf ( "The original data is : " );
printf ( "%f \n\n", a );
printf ( "The result : %f\n", fun ( a ) );

} 书上以以上代码实现保留两位小数和对第三位小数进行四舍五入 可是 当我输进1.555时答案为什么不是1.560000而是1.550000啊 不是说四舍五入吗

应该是精度问题。因你使用的是float变量,你可以用printf显示a*100的结果是155.499995而不是155.50000你可以全改成double型#include <stdio.h>
double fun ( double h )
{ return (long)( h * 100 +0.5 )/ 100.0;
}main( )
{ double a;
printf ("Enter a: "); scanf ( "%lf", &a );
printf ( "The original data is : " );
printf ( "%lf %lf\n\n", a, a*100 );
printf ( "The result : %lf\n", fun ( a ) );

}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-24
哈哈,我明白了,你输入1.556试试啊
似乎和 转换成二进制后的误差有关系
你输入1.5550001都是正确滴

printf(".2f", a);你试试,1.455没事,1.555也是错误的啊
第2个回答  2014-01-24
我晕,这么下作啊????? 我的回答被人检举了 !!!!!!!!!! 我去~~~ 你把第4行的强制转换去掉也就是(long) 再编译就OK了! 刚刚检举我的人, 我**你** 真没素质!!!!!!!!!
相似回答