c++和c格式控制

Printf()输出格式控制 setprecision()与setiosflags()(c++小数点后面精确到n位) 

2011-11-17 04:11:53|  分类: C++ |  标签: |字号订阅

 
 

Printf()输出格式控制

[学习笔记--Printf()输出格式控制] hzh-fa 发表于 2006-8-12 12:26:00

1.转换说明符       %a(%A)     浮点数、十六进制数字和p-(P-)记数法(C99)       %c             字符       %d             有符号十进制整数       %f              浮点数(包括float和doulbe)       %e(%E)     浮点数指数输出[e-(E-)记数法]       %g(%G)     浮点数不显无意义的零"0"       %i              有符号十进制整数(与%d相同)       %u             无符号十进制整数       %o             八进制整数    e.g.     0123       %x(%X)      十六进制整数0f(0F)   e.g.   0x1234       %p             指针       %s             字符串       %%            "%"

2.标志       左对齐:"-"   e.g.   "%-20s"       右对齐:"+"  e.g.   "%+20s"       空格:若符号为正,则显示空格,负则显示"-"   e.g.   "%  6.2f"            #:对c,s,d,u类无影响;对o类,在输出时加前缀o;对x类,在输出时加前缀0x;            对e,g,f 类当结果有小数时才给出小数点。

3.格式字符串(格式)       [标志][输出最少宽度][.精度][长度]类型      "%-md" :左对齐,若m比实际少时,按实际输出。      "%m.ns":输出m位,取字符串(左起)n位,左补空格,当n>m or m省略时m=n                       e.g.    "%7.2s"  输入CHINA                                              输出"     CH"      "%m.nf":输出浮点数,m为宽度,n为小数点右边数位                       e.g.    "%3.1f"    输入3852.99                                                输出3853.0       长度:为h短整形量,l为长整形量

 

setprecision()与setiosflags()(c++小数点后面精确到n位)

使用setprecision(n)可控制输出流显示浮点数的数字个数。C++默认的流输出数值有效位是6。
如果setprecision(n)与setiosflags(ios::fixed)合用,可以控制小数点右边的数字个数。setiosflags(ios::fixed)是用定点方式表示实数。
如果与setiosnags(ios::scientific)合用, 可以控制指数表示法的小数位数。setiosflags(ios::scientific)是用指数方式表示实数。
例如,下面的代码分别用浮点、定点和指数方式表示一个实数:

//********************* //** ch2_1.cpp ** //*********************

#include <iostream.h>   #include <iomanip.h> //要用到格式控制符

void main() { double amount = 22.0/7; cout < <amount < <endl; cout < <setprecision(0) < <amount < <endl
< <setprecision(1) < <amount < <endl < <setprecision(2) < <amount < <endl < <setprecision(3) < <amount < <endl < <setprecision(4) < <amount < <endl;

cout < <setiosflags(ios::fixed); cout < <setprecision(8) < <amount < <endl;

cout < <setiosflags(ios::scientific)

< <amount < <endl;

cout < <setprecision(6); //重新设置成原默认设置 }

运行结果为: 3.14286 3.14286 3 3.1 3.14 3.143
3.14285714 3.14285714e+00

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

C++中setiosflags()的用法。

 

cout<<setiosflags(ios::fixed)<<setiosflags(ios::right)<<setprecision(2);

setiosflags 是包含在命名空间iomanip 中的C++ 操作符,该操作符的作用是执行由有参数指定

区域内的动作;

iso::fixed 是操作符setiosflags 的参数之一,该参数指定的动作是以带小数点的形式表示浮点

数,并且在允许的精度范围内尽可能的把数字移向小数点右侧;

iso::right 也是setiosflags 的参数,该参数的指定作用是在指定区域内右对齐输出;

setprecision 也是包含在命名空间iomanip 中的C++ 操作符,该操作符的作用是设定浮点数;

setprecision(2) 的意思就是小数点输出的精度,即是小数点右面的数字的个数为2。

cout<<setiosflags(ios::fixed)<<setiosflags(ios::right)<<setprecision(2);

合在一起的意思就是,输出一个右对齐的小数点后两位的浮点数。


使用setprecision(n)可控制输出流显示浮点数的数字个数。C++默认的流输出数值有效位是6。
如果setprecision(n)与setiosflags(ios::fixed)合用,可以控制小数点右边的数字个数。

setiosflags(ios::fixed)是用定点方式表示实数

===================================

===================================

补充:

C++中的cout.setf()跟cout.precision()的作用是什么?

答:

这两个就是格式控制的~ostream成员函数里面的,也可以用输出流操作符来控制,都一样的~附给你一些看看~  其中cout.setf跟setiosflags一样的,cout.precision跟setprecision一样~  #include <iomanip>  这里面iomanip的作用比较多:  主要是对cin,cout之类的一些操纵运算子,比如setfill,setw,setbase,setprecision等等。它是I/O流控制头文  件,就像C里面的格式化输出一样.以下是一些常见的控制函数的:  dec 置基数为10 相当于"%d"  hex 置基数为16 相当于"%X"  oct 置基数为8 相当于"%o"  setfill(c) 设填充字符为c  setprecision(n) 设显示小数精度为n位  setw(n) 设域宽为n个字符  这个控制符的意思是保证输出宽度为n。如:  cout<<setw(3)<<1<<setw(3)<<10<<setw(3)<<100; 输出结果为  1 10100 (默认是右对齐)当输出长度大于3时(<<1000),setw(3)不起作用。  setioflags(ios::fixed) 固定的浮点显示  setioflags(ios::scientific) 指数表示  setiosflags(ios::left) 左对齐  setiosflags(ios::right) 右对齐  setiosflags(ios::skipws 忽略前导空白  setiosflags(ios::uppercase) 16进制数大写输出  setiosflags(ios::lowercase) 16进制小写输出  setiosflags(ios::showpoint) 强制显示小数点  setiosflags(ios::showpos) 强制显示符号  举例:  #include <iostream>  #include <iomanip>  using namespace std;  int main()  {  cout<<12345.0<<endl;//输出"12345"  cout<<setiosflags(ios::fixed)<<setprecision(3)<<1.2345<<endl;输出"1.235"  cout<<setiosflags(ios::scientific)<<12345.0<<endl;//输出"1.234500e+004 "  cout<<setprecision(3)<<12345.0<<endl;//输出"1.235e+004 "  return 0;  }

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