cout输出控制——位数和精度控制

Posted 4770K

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 标签的设置状态!

 

参考链接:cplusplus.com/reference/ios/fixed

以上是关于cout输出控制——位数和精度控制的主要内容,如果未能解决你的问题,请参考以下文章

使用cout标准输出控制小数点后位数

C语言中输出时怎样控制小数点后的位数,请举例说明保

c语言如何控制小数位数

文件重定向,getline()获取一样,屏幕输出流,格式控制符dec,oct,hex,精度控制setprecision(int num),设置填充,cout.width和file(字符),进制输入(示

c语言如何控制小数位数?

matlab如何设置小数点后位数?