c++標頭檔iomanip.h中的setw、setprecision、setfill和setbase函數

來源:互聯網
上載者:User
#include <iostream>   //不要用iostream.h ,會出現好多問題#include <iomanip>    // io 流量控制標頭檔, 主要是一些操縱用法如setw(int n),setprecision(int n) ,setbase(int   n),setfill(char c)的.

   ▲setw(n)用法: 通俗地講就是預設寬度
   如 cout<<setw(5)<<255<<endl;
   結果是:
   (空格)(空格)255
   ▲setfill(char c) 用法 : 就是在預設寬度中如果已存在沒用完的寬度大小,則用設定的字元c填充
   如 cout<<setfill('@')<<setw(5)<<255<<endl;
   結果是:
   @@255
   ▲setbase(int n) : 將數字轉換為 n 進位.
   如 cout<<setbase(8)<<setw(5)<<255<<endl;
    cout<<setbase(10)<<setw(5)<<255<<endl;
    cout<<setbase(16)<<255<<endl;
   結果是:
   (空格)(空格)377
   (空格)(空格) 255
   (空格)(空格) ff
   ▲ setprecision用法
   使用setprecision(n)可控制輸出資料流顯示浮點數的數字個數。C++預設的流輸出數值有效位是6。
   如果setprecision(n)與setiosflags(ios::fixed)合用,可以控制小數點右邊的數字個數。setiosflags(ios::fixed)是用定點方式表示實數。
   如果與setiosnags(ios::scientific)合用, 可以控制指數標記法的小數位元。setiosflags(ios::scientific)是用指數方式表示實數。
   例如,下面的代碼分別用浮點、定點和指數方式表示一個實數:

#include <iostream>#include <iomanip>int 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); //重新設定成原預設設定    return 0;}

   運行結果為:
   3.14286
   3
   3
   3.1
   3.14
   3.143
   3.14285714
   3.14285714e+00

   該程式在32位機器上運行通過。
   在用浮點表示的輸出中,setprecision(n)表示有效位元。
   第1行輸出數值之前沒有設定有效位元,所以用流的有效位元預設設定值6:第2個輸出設定了有效位元0,C++最小的有效位元為1,所以作為有效位元設定為1來看待:第3~6行輸出按設定的有效位元輸出。
   在用定點表示的輸出中,setprecision(n)表示小數位元。
   第7行輸出是與setiosflags(ios::fixed)合用。所以setprecision(8)設定的是小數點後面的位元,而非全部數字個數。
   在用指數形式輸出時,setprecision(n)表示小數位元。
   第8行輸出用setiosflags(ios::scientific)來表示指數表示的輸出形式。其有效位元沿用上次的設定值8。

   setw(n)是設定域寬。
   就是你的輸出要佔多少個字元。
   比如:
   cout<<setw(5)<<12345<<endl;
   就輸出:
   12345

   cout<<setw(6)<<12345<<endl;
   輸出:
   12345
   而如果你要輸出的字元寬度超出了setw(n)的n值,就按輸出字元的寬度輸出。
   如你的cout<<setw(4)<<12.3456<<endl;
   就輸出12.3456

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.