C++中的fixed & setprecision ?

ostream& operator << (ostream& os, const DateTime& DT)

{

os << fixed << setprecision(1);

.

.

.

}

其中的fixed 和 setprecision(1) 是什麼意思??

謝謝回答~~~

Update:

那順便問~~

long flags = os.flags();

int p = os.precision();

int sp = flags & ios::showpos;

以上三行又為何意???

謝謝

Update 2:

真的很謝謝您替我做這麼詳細的解答~ 容小的我再問您一個問題吧...

上面提到的sp 在程式的後面

有使用到...

if (sp){

.....

}

我的問題是 sp不是int嗎?

為什麼可以放在if裡判斷?? 而且就只放了一個sp

也沒有sp=... 之類的

那是如何判斷 if是否成立???

感謝回答...救命恩人T_T

1 Answer

Rating
  • Lv 7
    2 decades ago
    Favorite Answer

    每一個ios都有一個int的變數來表示要如何顯示數字.(整數型態或小數型態) ostream是繼承ios的. 所以每個ostream也是. ios class裡的成員函式flags()會把那個變數回傳回來.  在那個變數裡有32個bits. 每個bit表示一個性質. ios::fixed的值是4, 是從右數來第3個bit. 如果這個bit是0的話那這個ios在顯示大於999999的數字時會用科學方法來顯示. 如果這個bit是0的話那這個ios在顯示大於999999的數字時不會用科學方法來顯示. 科學方法就是像1e+008啦. 這只適用於小數型態例:double a;a = 10000000;cout << a << endl << fixed << a << endl;會顯示1e+008100000000.000000 ios::showpos的值是2048, 是從右數來第12個bit. 如果這個bit是1的話那這個ios在顯示數字時會顯示正負號. 如果這個bit是0的話那這個ios在顯示數字時只會顯示負號. 這只適用於整數型態或小數型態例:cout << showpos << -2 << endl<< 2 << endl;會顯示-2+2 setprecision()是一個C++的函式. 它要跟一個ios的實體和”<<”一起用才有效且只適用於小數型態. 因ostream是繼承ios的所以ostream的實體也可以. 它的用途是告訴ios的實體在顯示小數時要顯示幾個數字.例:cout << setprecision(2) << 1.2314 << endl<< setprecision(3) << 1.2314 << endl;會顯示1.2 //因setprecision(2)告訴cout顯示小數時只要顯示2個數字就好了1.23 //因setprecision(3)告訴cout顯示小數時只要顯示3個數字就好了 如果跟fixed一起用的話, setprecision()變成顯示小數時要顯示到小數點後幾位.例:cout << fixed << setprecision(2) << 1.2314 << endl<< setprecision(3) << 1.2314 << endl;會顯示1.23 //因fixed和setprecision(2) 所以cout顯示小數時只要顯示到小數點後2位就好了1.231 //因fixed和setprecision(3)所以cout顯示小數時只要顯示到小數點後3位就好了  precision()是個ios class裡的成員函式. precision()回傳這ios class在顯示小數時會顯示幾個數字. setprecision()設定會顯示幾個數字, precision()回傳會顯示幾個數字.例:cout << setprecision(2) << cout.precision() << endl << setprecision(3) << cout.precision() << endl;會顯示2 //因setprecision(2)告訴cout顯示小數時只要顯示2個數字就好了或顯示到小數點後2位就好了3 //因setprecision(3)告訴cout顯示小數時只要顯示3個數字就好了或顯示到小數點後3位就好了 OK, 現在來回答你的問題os << fixed << setprecision(1); 表示os從此以後不會用科學方法來顯示大於999999的小數且在顯示小數時只要顯示到小數點後1位1 long flags = os.flags(); 2 int p = os.precision(); 3 int sp = flags & ios::showpos; 第1句是用os的flags()找出os如何顯示數字並把結果存入flags.第2句是用os的precision()找出os在顯示小數時會顯示幾個數字, 並把結果存入p.第3句是檢查flags裡showpos的bit(第12個bit)是1還是0, 並把結果存入sp.如sp不是0表示os會顯示正負號. 如sp是0表示os只會顯示負號.

    2005-06-25 01:00:34 補充:

    if (sp) {

    }

    這是

    if (sp != 0) {

    }

    的縮寫.

    在C/C++裡, 0是false. 其他的都是true.

    所以

    if (sp) {

    }

    是探測sp的值是0還是不是0. 若是0那就是false. 若不是0那就是true.

    懂不懂?不懂請再問

    Source(s): Myself
Still have questions? Get your answers by asking now.