刷到一道需要控制輸出精度和位數的題目
剛開始以為單純使用 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 標簽的設置狀態!