C++的输出精度控制(2)

3.设置格式状态的格式标志

格式标志   作用  
ios::left   输出数据在本域宽范 围内左对齐  
ios::right   输出数据在本域宽范围内右对齐  
ios::internal   数值的符号位在域宽内左对齐,数值右对齐,中间由填充字符填充  
ios::dec   设置整数的基数为10  
ios::oct   设置整数的基数为8  
ios::hex   设置整数的基数为16  
ios::showbase   强制输出整数的基数(八进制以0打头,十六进制以0x打头)  
ios::showpoint   强制输出浮点数的小点和尾数0  
ios::uppercase   在以科学计数法输出E和十六进制输出字母X时,以大写表示  
ios::showpos   输出正数时,给出“+”号。  
ios::scientific   设置浮点数以科学计数法(即指数形式)显示  
ios::fixed   设置浮点数以固定的小数位数显示  
ios::unitbuf   每次输出后刷新所有流  
ios::stdio   每次输出后清除 stdout,stderr  

以小数形式,保留三位小数输出:
cout<<setprecision(3)<<setiosflags(ios::fixed)<<3.1415926<<endl;

C++输出流的格式控制setw()、setfill()、setbase()、setprecision()、tellp...

inline SMANIP(long) resetiosflags(long _l) { return SMANIP(long)(__resetiosflags, _l); }
inline SMANIP(int) setfill(int _m) {return SMANIP(int)(__setfill, _m); }
inline SMANIP(long) setiosflags(long _l) {return SMANIP(long)(__setiosflags, _l); }
inline SMANIP(int) setprecision(int _p) {return SMANIP(int)(__setprecision, _p); }
inline SMANIP(int) setw(int _w) { return SMANIP(int)(__setw, _w); }

//他们都是inline 内联函数

(1)setw(int n) 预设输出宽度

如:cout<<setw(6)<<123<<endl;

输出结果为“ 123”,在123的前面会有3个空格,123右对齐。

(2)setfill(char c) 预设填充字符

如:cout<<setfill(‘#’)<<123<<endl;

输出显示结果为“###123”,123右对齐,在前面填充3个’#’ 。

(3)setbase(int n) 预设整数输出进制

如:cout<<setbase(8)<<255<<endl;

输出显示结果为377

(4)setprecision(int n) 用于控制输出流显示浮点数的精度,整数n代表显示的浮点数数字的个数。示例程序如下:

#include <iostream.h>

#include <iomanip.h> //格式控制

void main()

{

double amount = 22.0/7;

cout <<amount <<endl; //(1)

cout <<setprecision(0) <<amount <<endl //(2)

<<setprecision(1) <<amount <<endl //(3)

<<setprecision(2) <<amount <<endl //(4)

<<setprecision(3) <<amount <<endl //(5)

<<setprecision(4) <<amount <<endl; //(6)

cout <<setiosflags(ios::fixed);

cout <<setprecision(8) <<amount <<endl; //(7)

cout <<setiosflags(ios::scientific)<<amount<<endl; //(8)

cout <<setprecision(6);

}

第1行输出数值之前没有设置有效位数,所以用流的有效位数默认设置值6:第2个输出设置了有效位数0,C++最小的有效位数为1,所以作为有效位数设置为1来看待:第3~6行输出按设置的有效位数输出。 第7行输出是与setiosflags(ios::fixed)合用。所以setprecision(8)设置的是小数点后面的位数,而非全部数字个数。 第8行输出用setiosflags(ios::scientific)来表示指数表示的输出形式。其有效位数沿用上次的设置值8。在用指数形式输出时,setprecision(n)表示小数位数。 (可是这个指数形式的输出我用VC6没有运行出来)。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/74227cd67a2a0f1296bff50296b1157c.html