cout輸出控制——位數和精度控制


刷到一道需要控制輸出精度和位數的題目

剛開始以為單純使用 iomanip 函數庫里的 setprecision 就可以,但 OJ 給我判了答案錯誤,后來一想這樣輸出並不能限制位數只能限制有效位數。

比如說 0.000101000110

用 setprecision(4) 答案是 0.000101 這里甚至把最后一位的有效數字 0 省略了!!

后來了解到 fixed 關鍵字

那么在這里若要控制小數點后 N 位 只要寫成 

cout << fixed << setprecision(N) 

即可達到效果。

 

然而卻有了下面的問題。。。

cout << fixed << setprecision(4) << 0.000101000110 << endl;
cout << 3.141593 <<endl;

卻得到了這樣的輸出結果

0.0001
3.1416

沒錯,之后的輸出被同樣的輸出格式所限制了。

那就要找到辦法清除輸出控制

遺憾的是 CPP 目前並沒有辦法消除 setprecision 標簽的效果方法,

但是消除 fixed 還是有的

在不需要 fixed 效果輸出的前一行加上

cout.unsetf( ios::fixed );

例如

cout << fixed << setprecision(4) << 0.000101000110 << endl;
cout.unsetf( ios::fixed );
cout << 3.141593 <<endl;

輸出結果如下:

0.0001
3.142

但可以通過再次設定 setprecision 標簽來達到控制位數

例如

cout << fixed << setprecision(4) << 0.000101000110 << endl;
cout.unsetf( ios::fixed );
cout <<setprecision(6) << 3.141593 <<endl;

輸出結果如下:

0.0001
3.14159

 

所以在碰到對精確度和位數都有要求的題目時需要格外注意 setprecision 標簽的設置狀態!

 

參考鏈接:cplusplus.com/reference/ios/fixed


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM