本帖最后由 jbbppa 于 2012-5-11 17:25 编辑
使用的是borland c++6.0
题目是输入一个double类型数,保留小数后两位,对第三位进行四舍五入。答案是:main()
{
double a,b;
scanf("%lf",&a);
b=(int)(a*100+0.5)/100.0;
printf("%.2f",b);
}
验证发现如果输入123.345或者说是XXX.XX5结果输出结果为123.34而不是123.35,求大神指教。
b=(int)(a*100+0.5)/100.0;此句我分开打印验证,如果写成
b=a*100+0.5;
b=(int)(b);
b=b/100;
就是对的,问题出在 (int)强制转换上面,即写成b=(int)(a*100+0.5)输入123.345,结果为12334而不是12335,为什么?
我还发现一个奇怪问题,就是 b=(int)(a*100+0.5)/100.0;最后必须写100.0而不是100,如果是100就会变成输入123.345,经过此步后就会变成123.00,但是如果是如下面我分开写成
b=a*100+0.5;
b=(int)(b);
b=b/100;就没有问题,这又是为什么? |