歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C++的輸出精度控制

C++的輸出精度控制

日期:2017/3/1 9:54:12   编辑:Linux編程

使用這些格式需要聲明包含<iomainip>

long flags( ) const 返回當前的格式標志。
long flays(long newflag) 設置格式標志為newflag,返回舊的格式標志。
long setf(long bits) 設置指定的格式標志位,返回舊的格式標志。
long setf(long bits,long field)將field指定的格式標志位置為bits,返回舊的格式標志
long unsetf(long bits) 清除bits指定的格式標志位,返回舊的格式標志。
long fill(char c) 設置填充字符,缺省條件下是空格。
char fill( ) 返回當前填充字符。
int precision(int val) 設置精確度為val,控制輸出浮點數的有效位,返回舊值。
int precision( ) 返回舊的精確度值。
int width(int val) 設置顯示數據的寬度(域寬),返回舊的域寬。
int width( )只返回當前域寬,缺省寬度為0。這時插入操作能按表示數據的最小寬度顯示數據
dec 十進制的輸入輸出
hex 十六進制的輸入輸出
oct 八進制的輸入輸出
ws 提取空白字符
flush 刷新流
resetiosflags(long) 請除特定的格式標志位
setiosflags(long) 設置特定的格式標志位
setfill(char) 設置填充字符
setprecision(int) 設置輸出浮點數的精確度
setw(int) 設置域寬格式變量

C++輸入輸出流格式控制

1.使用控制符控制輸出格式

控制符 作用 dec 設置整數的基數為10 hex 設置整數的基數為16 oct 設置 整數的基數為8 setbase(n) 設置整數的基數為n(n只能是16,10,8之一) setfill(c) 設置填充字符c,c可以是字符常量或字符變量 setprecision(n) 設置實數的精度為n位。在以一般十進制小數形式輸出時,n代表有效數字。在以fixed(固定小數位 數)形式和scientific(指數)形式輸出時,n為小數位數。 setw(n) 設置字段寬度為n位。 setiosflags(ios::fixed) 設置浮點數以固定的小數位數顯示。 setiosflags(ios::scientific) 設置浮點數以科學計數法(即指數形式)顯示。 setiosflags(ios::left) 輸出數據左對齊。 setiosflags(ios::right) 輸出數據右對齊。 setiosflags(ios::shipws) 忽略前導的空格。 setiosflags(ios::uppercase) 在以科學計數法輸出E和十六進制輸出字母X時,以大寫表示。 setiosflags(ios::showpos) 輸出正數時,給出“+”號。 resetiosflags 終止已設置的輸出格式狀態,在括號中應指定內容。

2.用流對象的 成員控制輸出格式

流成員函數 與之作用相同的控制符 作用 precision(n) setprecision(n) 設置實 數的精度為n位。 width(n) setw(n) 設置字段寬度為n位。 fill(c) setfill(c) 設置填充字符c。 setf( ) setiosflags( ) 設置輸出格式狀態,括號中應給出格式狀態,內容與控制符setiosflags括號中內容相同。 ubsetf( ) resetiosflags( ) 終止已設置的輸出格式狀態。

cout.width(10);
cout.setf(ios::hex);

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沒有運行出來)。

setw(int _w)講解
<< setw(int _w) << 輸出位寬
如<< setw(7) << 1000 輸出結果為 "1000 "(緊跟三個空格)
而如<< setw(3) << 1000 位寬小於原來的數字的位寬 那麼按照原來的格式輸出"1000" 前後無空格


setfill() 講解
setfill(int _m) 隨setw(int _w)一起使用 意思是在set(int _w)設定後的空格填充指定的字符
注意setfill裡邊的參數是int _m 是個整數 所以 如果我們要用空格來填充*號的時候
要使用setfill('*')[字符] 而不是setfill(*)

C++中tellp()函數與tellg()函數
tellp()函數用來獲取“輸出指針”的當前位置(從文件首到當前位置的字節數);
tellg()函數用來獲取“讀入指針”的當前位置(從文件首到當前位置的字節數)。

Copyright © Linux教程網 All Rights Reserved