注册 登录
编程论坛 C++教室

小数点输出位数的问题

青蝶 发布于 2018-08-30 00:21, 979 次点击
要求对ans保留两位小数(四舍五入),想问一下为什么第一种写法不对,第二种对了?

显示错误的写法:
 if(ans*100-(int)(ans*100)>=0.5) ans+=0.01;
 printf("%.2lf\n",ans);

显示正确的写法:
 if(ans*100-(int)(ans*100)==0.5) ans+=0.001; //加上这一句是因为我发现当小数点后第三位是5,其余都是零的时候,
                                             //没有四舍五入到第二位,麻烦大佬也解释一下,谢谢。
 cout<<fixed<<setprecision(2)<<ans<<endl;
2 回复
#2
rjsp2018-08-30 10:08
这种需求本身就怪里怪气的,浮点数不是十进制形式……

即使假设浮点数能无误差表示每一个实数
对于第一段代码,如果 ans 原先为 1.365 的话,你处理后它变成了 1.375,用printf("%.2lf\n",ans)是输出1.37,还是输出1.38
你不知道,我也不知道,gcc等都是四舍六入五成双,vc是四舍五入
#3
rjsp2018-08-30 10:12
举个实际可观察到的例子吧
printf( "%+.0f, %+.0f\n", -2.5, +2.5 );
gcc输出 -2, +2;VC输出 -3, +3

1