在C++中,对于浮点数x的小数位数保留n位输出,我们经常用到cout<<setprecision(n)<<fixed<<x;
那么其中的取舍原理,不知道大家有没有注意过,来看下面这个例子:
int main(){
double a;
cin>>a;
cout<<round(a)<<endl;
cout<<setprecision(0)<<fixed<<a;
return 0;
}
当输入0.5时,输出结果是1和0。没错!setprecision并不是四舍五入(round是四舍五入),它遵循的规则是“四舍六入五留双”。
所谓四舍六入五留双,是指如果恰好是0.5的情况,会把他近似到使得前一位是偶数。
比如近似到整数,0.4为0,0.5为0,0.50001为1,0.6为1,1.5为2,2.5为2。
上述就是setprecision在小数取舍时的特性,请注意!