cout输出控制——位数和精度控制
刷到一道需要控制输出精度和位数的题目
刚开始以为单纯使用 iomanip 函数库里的 setprecision 就可以,但 OJ 给我判了答案错误,后来一想这样输出并不能限制位数只能限制有效位数。
比如说 0.000101000110
用 setprecision(4) 答案是 0.000101 这里甚至把最后一位的有效数字 0 省略了!!
后来了解到 fixed 关键字
那么在这里若要控制小数点后 N 位 只要写成
cout << fixed << setprecision(N)
即可达到效果。
然而却有了下面的问题。。。
cout << fixed << setprecision(4) << 0.000101000110 << endl; cout << 3.141593 <<endl;
却得到了这样的输出结果
0.0001
3.1416
没错,之后的输出被同样的输出格式所限制了。
那就要找到办法清除输出控制
遗憾的是 CPP 目前并没有办法消除 setprecision 标签的效果方法,
但是消除 fixed 还是有的
在不需要 fixed 效果输出的前一行加上
cout.unsetf( ios::fixed );
例如
cout << fixed << setprecision(4) << 0.000101000110 << endl; cout.unsetf( ios::fixed ); cout << 3.141593 <<endl;
输出结果如下:
0.0001
3.142
但可以通过再次设定 setprecision 标签来达到控制位数
例如
cout << fixed << setprecision(4) << 0.000101000110 << endl; cout.unsetf( ios::fixed ); cout <<setprecision(6) << 3.141593 <<endl;
输出结果如下:
0.0001
3.14159
所以在碰到对精确度和位数都有要求的题目时需要格外注意 setprecision 标签的设置状态!