1. 程式人生 > >C++中setiosflags( ) 的用法

C++中setiosflags( ) 的用法

setiosflags( ios::fixed ),標頭檔案為:include<iomanip>.

在遇到要計算浮點數且希望能控制其輸出、精度、小數點後的位數等時,用setiosflags( ios::fixed )來控制。

 

1. setprecision( )

使用setprecision(n)可控制輸出流顯示浮點數的數字個數。C++預設的流輸出數值有效位是6setprecision(n)就是輸出n個數,會有四捨五入。

#include<iostream>

#include<iomanip>

#include<cmath>

using namespace std;

int main() {

    double s=20.7843000;

    cout << s << endl;

    cout << "setprecision( 1 )"<< setprecision( 1 )<< s << endl;

    cout << "setprecision( 2 )"<< setprecision( 2 )<< s << endl;

    cout << "setprecision( 3 )"<< setprecision( 3 )<< s << endl;

    cout << "setprecision( 4 )"<< setprecision( 4 )<< s << endl;

    cout << "setprecision( 5 )"<< setprecision( 5 )<< s << endl;

    cout << "setprecision( 6 )"<< setprecision( 6 )<< s << endl;

    cout << "setprecision( 7 )"<< setprecision( 7 )<< s << endl;

    cout << "setprecision( 8 )"<< setprecision( 8 )<< s << endl;

return 0;

}

輸出:

20.7843

setprecision( 1 )2e+01

setprecision( 2 )21

setprecision( 3 )20.8

setprecision( 4 )20.78

setprecision( 5 )20.784

setprecision( 6 )20.7843

setprecision( 7 )20.7843

setprecision( 8 )20.7843

可見,小數部分末尾為0時,是輸不出來的!

2. setiosflags(ios::fixed)

setprecision(n)setiosflags(ios::fixed)合用,可以控制小數點右邊的數字個數。

#include<iostream>

#include<iomanip>

#include<cmath>

using namespace std;

int main() {

    double s=20.7843000;

    cout << s << endl;

    cout << setiosflags( ios::fixed );

    cout << "setprecision( 1 )"<< setprecision( 1 )<< s << endl;

    cout << "setprecision( 2 )"<< setprecision( 2 )<< s << endl;

    cout << "setprecision( 3 )"<< setprecision( 3 )<< s << endl;

    cout << "setprecision( 4 )"<< setprecision( 4 )<< s << endl;

    cout << "setprecision( 5 )"<< setprecision( 5 )<< s << endl;

    cout << "setprecision( 6 )"<< setprecision( 6 )<< s << endl;

    cout << "setprecision( 7 )"<< setprecision( 7 )<< s << endl;

    cout << "setprecision( 8 )"<< setprecision( 8 )<< s << endl;

return 0;

}

輸出:

20.7843

setprecision( 1 )20.8

setprecision( 2 )20.78

setprecision( 3 )20.784

setprecision( 4 )20.7843

setprecision( 5 )20.78430

setprecision( 6 )20.784300

setprecision( 7 )20.7843000

setprecision( 8 )20.78430000

結果全部正確。

3. setiosflags(ios::fixed|ios::showpoint)

setprecision( )的精度為0的時候,有showpoint,結果就會顯示小數點,沒showpoint,就不顯示小數點。

#include<iostream>

#include<iomanip>

#include<cmath>

using namespace std;

int main() {

    double s=20.7843000;

    cout << s << endl;

    cout << setiosflags( ios::fixed);

    cout << "setprecision( 0 )"<< setprecision( 0 )<< s << endl;

    cout << "setprecision( 1 )"<< setprecision( 1 )<< s << endl;

    cout << "setprecision( 2 )"<< setprecision( 2 )<< s << endl;

    cout << "setprecision( 3 )"<< setprecision( 3 )<< s << endl;

    cout << setiosflags( ios::fixed|ios::showpoint );

    cout << "setprecision( 0 )"<< setprecision( 0 )<< s << endl;

    cout << "setprecision( 1 )"<< setprecision( 1 )<< s << endl;

    cout << "setprecision( 2 )"<< setprecision( 2 )<< s << endl;

    cout << "setprecision( 3 )"<< setprecision( 3 )<< s << endl;

return 0;

}

輸出:

20.7843

setprecision( 0 )21

setprecision( 1 )20.8

setprecision( 2 )20.78

setprecision( 3 )20.784

setprecision( 0 )21.

setprecision( 1 )20.8

setprecision( 2 )20.78

setprecision( 3 )20.784