详细内容看《C++编程思想》
按照书里面的代码敲得,这里只说明一点:
T.setf(0, ios::floatfield);
第一个参数为0,对于这句automatic的格式化,是精度域指整个有效数字的数目, 而ios::scientific和ios::fixed的精度域都是指小数点后面的数字数目,这点注意区分,当第一个参数为0,即automatic情况下,若精度域小于所给变量的精度,则会自动变成科学记数法的格式,否则就保持定点格式
#include<iostream>
#include<iomanip>
#include<fstream>
using namespace std;
int main(){
ofstream T("trace.out");
int i = 47;
float f = 2300114.414159;
char* s = "Is there any more?";
T << setiosflags(ios::unitbuf | ios::showbase | ios::_Stdio | ios::uppercase | ios::showpos);
T << i << endl; //+47
T << hex << i << endl; //0X2F
T << resetiosflags(ios::uppercase) << oct << i << endl; //057
T.setf(ios::left, ios::adjustfield);
T << resetiosflags(ios::showbase) << dec << setfill('0');
T << "fill char : " << T.fill() << endl;
T << setw(10) << i << endl; //+470000000
T.setf(ios::right, ios::adjustfield);
T << setw(10) << i << endl; //0000000+47
T.setf(ios::internal, ios::adjustfield);
T << setw(10) << i << endl; //+000000047
T << i << endl; //+47
T << resetiosflags(ios::showbase) << setiosflags(ios::showpoint) << "prec = " << T.precision() << endl;
T.setf(ios::scientific, ios::floatfield);
T << f << endl; //2.300115e+06
T.setf(ios::fixed, ios::floatfield);
T << f << endl; ///2300114.500000
T.setf(0, ios::floatfield);
T << f << endl; //2.30011e+06
T << setprecision(20);
T << "prec = " << T.precision() << endl;
T.setf(ios::scientific, ios::floatfield);
T << f << endl; //2.30011450000000000000e+06
T.setf(ios::fixed, ios::floatfield);
T << f << endl; //2300114.5000000000000000000
T.setf(0, ios::floatfield);
T << f << endl; //2.30011450000000000000e+06
T << setw(10) << s << endl; //Is there any more?
T << setw(40) << s << endl; //0000000000000000000000Is there any more?
T.setf(ios::left, ios::adjustfield);
T << setw(40) << s << endl; //Is there any more?0000000000000000000000
T << resetiosflags(ios::showpoint | ios::unitbuf | ios::_Stdio);
system("pause");
return 0;
}
输出结果的文件内容为: