c++格式化输出
2018-03-11 21:11
309 查看
有时候需要利用c++进行格式化输出,比如指定位数、不足用0补齐、按列靠右对齐等等。
一般有两种方法:
- 利用iostream对象成员函数修改格式状态值
< ios >或者< iostream >里定义了iostream类的成员函数,比如函数setf,可以设置相应的format flags,比如cout.setf(fixed)会设置cout的浮点数以定点而不是科学计数法来输出。
- 向对象中输出< iomanip >中的操作符
比如
下面根据各种功能对两种方式进行说明。
设定最小宽度
cout.width()返回cout的输出最小宽度值,默认为0,width(8),修改width值为8,然后下一个输出靠右对齐左边用空格补齐,第二次输入a0的时候,发现width(8)失效了,说明width值修改只影响下一次输出,并没有更改cout的格式状态值。setw()的作用是一样的,只是使用方式的区别。
只输出a0,我们还无法知道两个问题:小数点算不算是宽度,如果待输出宽度大于设定的最小宽度值怎么办
控制浮点数格式
默认情况下,标准库会根据值的大小选择定点十进制还是科学计数法来输出:对于非常大的数或者非常小的数,用科学计数法来输出,否则打印为定点十进制。当然我们也可以自己设定浮点数格式,同样有两种方法。
设定精确度
与宽度类似,有两种方法
当待输出浮点数精度高于设定值时,四舍五入而不是简单的截断。
也可以用
其实还可以格式化输入,以后再来探讨。
一般有两种方法:
- 利用iostream对象成员函数修改格式状态值
< ios >或者< iostream >里定义了iostream类的成员函数,比如函数setf,可以设置相应的format flags,比如cout.setf(fixed)会设置cout的浮点数以定点而不是科学计数法来输出。
- 向对象中输出< iomanip >中的操作符
比如
cout<<setw(8)设置最小输出宽度
下面根据各种功能对两种方式进行说明。
设定最小宽度
int main() { double a0=3.,a1=3.1,a2=3.14,a3=3.141,a4=3.1415,a5=3.14159,a6=3.141592; cout<<cout.width()<<endl; cout.width(8); cout<<a0<<endl; cout<<a0<<endl; cout<<setw(8)<<a0<<endl; cout<<a0<<endl; return 0; } //输出 0 3 3 3 3
cout.width()返回cout的输出最小宽度值,默认为0,width(8),修改width值为8,然后下一个输出靠右对齐左边用空格补齐,第二次输入a0的时候,发现width(8)失效了,说明width值修改只影响下一次输出,并没有更改cout的格式状态值。setw()的作用是一样的,只是使用方式的区别。
只输出a0,我们还无法知道两个问题:小数点算不算是宽度,如果待输出宽度大于设定的最小宽度值怎么办
int main() { double a0=3.,a1=3.1,a2=3.14,a3=3.141,a4=3.1415,a5=3.14159,a6=3.141592; cout<<setfill('0')<<setw(8)<<a3<<endl; cout<<setw(5)<<a5<<endl; return 0; } //输出 0003.141 3.14159
set fill设定了位数不足时用什么字符来补齐,第一个输出告诉我们,小数点也算在内,第二个输出告诉我们,width或者setw只是设定了最小宽度,当待输出宽度大于该值时,不受影响,全部输出。
控制浮点数格式
默认情况下,标准库会根据值的大小选择定点十进制还是科学计数法来输出:对于非常大的数或者非常小的数,用科学计数法来输出,否则打印为定点十进制。当然我们也可以自己设定浮点数格式,同样有两种方法。
int main() { < 4000 span class="hljs-keyword">double a0=3.,a1=3.1,a2=3.14,a3=3.141,a4=3.1415,a5=3.14159,a6=3.141592; cout.setf(ios::fixed); cout<<a6<<endl; cout.setf(ios::scientific); cout<<a6<<endl; } //输出 3.141592 0x1.921fafc8b007ap+1
设定精确度
与宽度类似,有两种方法
precision()和
setprecision(),但是精确度的理解与当前流对象的浮点输出格式有关,默认情况下,precision指的是整数部分和小数部分位数之和,使用fixed或者scientific时,指的是小数部分的位数。默认精度为6位。
当待输出浮点数精度高于设定值时,四舍五入而不是简单的截断。
int main() { double a0=3.,a1=3.1,a2=3.14,a3=3.141,a4=3.1415,a5=3.14159,a6=3.141592,a7=3.141595; cout<<a6<<endl; //输出3.14159,共6位,小数2舍去 cout<<a7<<endl; //输出3.1416 ,其实是3.14160,末尾0舍去了,5进位了 cout.setf(ios::fixed); cout<<a6<<endl;//3.141592 }
也可以用
precision()函数来做。
其实还可以格式化输入,以后再来探讨。
相关文章推荐
- c++风格的格式化输出
- C++格式化输出,C++输出格式控制
- c++小数点后几位、有效位数、格式化输出
- C++ 格式化地输出乘法口诀表,要求每列左对齐
- C++ cout格式化输出(转)
- C++ cout 格式化输出方法
- cout格式化输出 C++
- C++的格式化输出
- C++格式化输出二: iomanip
- C++—— 用流函数格式化输出
- [学习笔记][C++Primer Plus]使用cout格式化输出字符串
- C++保留任意小数点后位数与格式化输出
- c++ cout 格式化输出
- C++格式化输出,C++输出格式控制
- c++ cout 格式化输出示例
- C/C++的格式化输出(2)--cout
- C++格式化输入输出
- 使用C++ ostringstream来格式化字符串输出
- 关于C++的输出流cout格式化输出
- C++格式化输出(转)