关于C++的cout的格式化输出
来源:互联网 发布:ubuntu 升级python2.7 编辑:程序博客网 时间:2024/06/05 20:23
今天呢,有人问我关于一个C++浮点数输出精度的问题,毕竟到现在我也还没怎么去考量那些操作符,也就一时没答上来,查了一下,回答了那个问题,也顺便做个整理,整体的关于那些输出的manipulator。
首先是那个不太对的代码
#include <iostream>#include <iomanip>using namespace std;int main(){const double PI = 3.14;const double P = 3.3;cout.precision(20);double i = 2;cout << P << endl;cout << setprecision(6) << PI << endl;cout << 1.008 << endl;cout << i << endl;return 0;}她后面的期望输出呢是6位有效数字,然而呢,shell只把一个3.3和另一个2输出就好了
输出:
3.29999999999999983.141.0082为了揭示这背后只有一个的真相呢,我调用我的上课时间,关于C++的格式化输出进行了一些网络上的查找,然而,效果不好。
好不容易探明了这古怪的真相——输出流输出的时候把你最后的零吃掉了啦!!!那个可爱的setprecision(n)函数只是使后面的保证输出的有效数字不超过n罢了,真正要把零显示出还是要靠可爱的showpoint:
cout << showpoint << setprecision(6) << PI << endl;
输出:
3.29999999999999983.140001.008002.00000这就符合要求了嘛。
顺着这个,我们继续探索一些其他的manipulator。
现在第一小组入场了,看呐,他们挥舞着手中的小彩旗,尽显年轻风采,斗志…(啪)
首先是ends
cout << showpoint << setprecision(6) << PI << ends << 2.1 << '\0' << 2.1 << 2.1;输出:
3.14000 2.10000 2.100002.10000可以看出,嗯多了一个空格,嗯,好吧,cpp reference上就比我的参考书写的明白多了:Inserts a null character.
本来也想搞个flush的例子的,但,根本没……,暂时想不到什么把东西塞进流不让他输出然后清空他的办法
endl太常用,算了。
接下来进场的是第二小组!它们有着神奇的化身,他们一位两体!(啪)
precision在最初已经用过了,下面几个让我们依次玩一玩。
const double PI = 3.14;const double P = 3.3;double i = 2;cout.width(6);cout << PI << endl;
cout << setw(8) << P << endl;cout << setfill('*') << setw(7) << i << endl;输出为:
3.14 3.32******2很可爱吧!默认占位符为空,并且setw是只能应用到下一个输出的,然后数一数输出的空和数字小数点,加起来一共就是6个,8个,7个字符了呢。
cout << setiosflags(ios::left) << setw(10) << PI << endl;cout << resetiosflags(ios::left) << setw(10) << PI << endl;输出为
3.14************3.14看!占位符到后面了,这里就用了一个格式标志ios::left,一取消,又到前面了,格式标志后面会介绍的
bool tru = true, fals = false;cout << boolalpha << tru << 1 << endl << fals << endl;输出
true1false代码:
cout << hex << 13 << endl << showbase << 13 << endl << oct << 143 << endl;输出:
d0xd0217代码:
cout << setprecision(9) << PI << endl;cout << showpoint << PI << endl;cout << i << endl;cout << noshowpoint << PI << endl;cout << i << endl;输出
3.143.140000002.000000003.142代码:
cout << PI << endl;cout << showpos << PI << endl;cout << 1.008 << endl;输出:
3.14+3.14+1.008
最后测一下fixed什么的
cout << fixed << PI << endl;cout << scientific << PI << defaultfloat << endl;cout << hexfloat << PI << endl;输出:
3.1400003.140000e+0000x1.91eb85p+1喵喵喵?那个浮点十六进制数我看不懂你啊。
OK,就这样吧,也挺全了,应该吧
阅读全文
0 0
- 关于C++的cout的格式化输出
- C++关于cout的格式化输出
- cout的格式化输出
- cout的格式化输出
- C/C++的格式化输出(2)--cout
- 关于C++的输出流cout格式化输出
- (C++)cout格式化输出示例
- (C++)cout格式化输出示例
- (C++)cout格式化输出示例
- cout的格式化控制
- C++中cout格式化输出的相关函数
- 有趣的搬砖工 No.2 cout格式化输出
- C++中 cout的格式化输出(保留小数)
- cout的输出
- cout的输出格式
- cout的二进制输出
- Cout输出的原理
- Cout输出的原理
- data为什么是一个函数
- 进程间通信
- 盒子模型
- 括号配对问题
- flex布局
- 关于C++的cout的格式化输出
- Ubuntu16.04 桌面左侧(Launcher)启动器与屏幕底部互换
- 程序秘籍
- k_nearest_neighbor.py
- JDBC | 1
- vue最终结构
- 【bzoj 2194】快速傅立叶之二(FFT)
- vue项目搭建
- Velocity之动态获取Web项目根目录