C/C++ 数据格式化

C/C++ 数据格式化

C/C++数据格式化输出的方式是设置格式化标志,格式化标志就是位掩码值,该位掩码值可以通过成员函数setf来设置,也可用unsetf来复位。

标准流成员函数precision用来指定浮点值显示的小数位数。但是如果没有设置iOS::showpoint标志,那么末尾的零将不被显示。要用前置加号来打印正数,就用ios::showpos。

格式化标志(iostream)

标志 含义 默认
boolalpha 以alpha格式进行布尔输入输出
showbase 显示8/16进制的前缀 off
showpoint 显示10进制数末尾的零 off
showpos 正数时显示加号 off
skipws >> 跳过空格键 on
uppercase 0X代表16进制,E代表科学计数 off
unitbuf 启用单元缓冲 off

举一个例子

double x = 1.5, y = 2.5;
cout.precision(3); //保留小数点后两位,vs下测试时,貌似这个数是包含小数点的
cout << x << endl; //打印1.5
cout << y << endl; //打印2.5
cout.setf(ios::showpoint); //保留小数点后的0
cout << x << endl; //打印1.50
cout << y << endl; //打印2.50

测试结果:

C/C++ 数据格式化_第1张图片

数据格式化测试代码:

#include 

using namespace std;

int main(void)
{
    float x = 12345.6789, y = 12345;
    //数据正常输出(默认方式)
    cout << x << " " << y << endl;

    //显示两个十位数
    cout.precision(3);
    cout << x << ' ' << y << endl;

    //显示末尾的零
    cout.setf(ios::showpoint);
    cout << x << ' ' << y << endl;

    //显示符号
    cout.setf(ios::showpos);
    cout << x << ' ' << y << endl;

    //返回符号和默认值的精度
    cout.unsetf(ios::showpos);
    cout.precision(0);

    //使用科学计数法
    cout.setf(ios::scientific, ios::floatfield);
    float z = 1234567890.123456;
    cout << z << endl;
    cout.setf(ios::uppercase);
    cout << z << endl;

    return 0;
}

//测试输出:(测试环境:vs2013)
C/C++ 数据格式化_第2张图片

数据操纵器(iomanip)

操纵器 结果等价于setf函数 意义
【fint flags group】
boolalpha setf(boolalpha) 布尔型
noboolalpha unsetf(boolalpha) 非布尔型
showbase setf(showbase) 显示基数
noshowbase unsetf(showbase) 不显示基数
showpoint setf(showpoint) 显示小数点
noshowpoint unsetf(showpoint) 不显示小数点
showpos setf(showpos) 正数前添加正号
noshowpos unsetf(showpos) 正数前不添加正号
skipws setf(skipws) 跳过输出中的空白
noskipws unsetf(skipws) 不跳过输出中的空白
uppercase setf(uppercase) 大写
nouppercase unsetf(uppercase) 小写
unitbuf setf(unitbuf) 插入操作数后立即刷新缓冲区
nounitbuf unsetf(unitbuf) 插入操作数后不立即刷新缓冲区
【adjustfeild group】
internal setf(internal, adjustfeild) 小写
left setf(left, adjustfeild) 内部对其
right setf(right, adjustfeild) 左对齐
uppercase setf(uppercase) 右对齐
【basefield group】
dec setf(dec, basefeild) 十进制
oct setf(oct, basefeild) 八进制
hex setf(hex, basefeild) 十六进制
【floatfeild group】
fixed setf(fixed, floatfeild ) 固定
scientific setf(scientific, floatfeild ) 科学计数
【others】
endl insert a newline and calls flush() 插入一个换行符并刷新
ends insert a ‘\0’ 插入一个空字符
flush flush the stream 强制刷新流

测试代码:

int x = 1, y = 2, z = 3;
cout << x << y << z << endl;

//不同基数下显示
cout << dec << x << endl \
    << oct << y << endl \
    << hex << z << endl;

//显示基数前缀
cout.setf(ios::showbase);
cout << dec << x << endl \
    << oct << y << endl \
    << hex << z << endl;

//测试结果:
C/C++ 数据格式化_第3张图片

参数化的操纵器(iomanip)

操纵器 意义
resetiofags(n) 复位所有n中所这只的标志(关闭n所设置的所有标志)
setiofags(n) 设置所有n所设置的标志
setbase(n) 等同于setf(n, ios::basefeild)
setfill(n) 等同于fill(n)//填充多余长度(默认为空格)
setprecision(n) 等同于precision(n)
setw(n) 等同于width(n)//设置输出宽度

你可能感兴趣的:(C-C++)