C++ showpoint操作符(詳解版)

2020-07-16 10:04:36
預設情況下,浮點數不會顯示尾數 0,並且如果沒有小數部分的浮點數則不顯示小數點。例如,以下程式碼:

double x = 456.0;
cout << x << endl;

將僅顯示 456。

現在介紹另一個有用的操作符 showpoint,它允許這些預設值被覆蓋。當使用 showpoint 時,表示列印浮點數的小數點和小數位數,即使顯示的數值沒有小數點。以下是應用了 showpoint 操作符的程式碼範例:

double x = 456.0;
cout << showpoint << x << endl;

它將顯示以下輸出結果:

456.000

這裡之所以顯示了 3 個零,是因為如果沒有指定所需的小數點位數,則預設顯示 6 個有效數。可以將 fixed、showpoint 和 setprecision 操作符一起使用,以便更好地控制輸出的外觀,範例如下:

double x = 456.0;
cout << fixed << showpoint << setprecision(2) << x << endl;

此版本的程式碼產生以下輸出:

456.00

下面的程式進一步說明了這些操作符的使用。與 setprecision —樣,fixed 和 showpoint 操作符都將持續有效,直到程式設計師明確更改它們為止:
// This program illustrates the how the showpoint, setprecision, and
// fixed manipulators operate both individually and when used together.
#include <iostream>
#include <iomanip> // Header file needed to use stream manipulators
using namespace std;

int main()
{
    double x = 6.0;
    cout << x << endl;
    cout << showpoint << x << endl;
    cout << setprecision(2) << x << endl;
    cout << fixed << x << endl;
    return 0;
}

程式輸出結果:

6
6.00000
6.0
6.00

程式的第 10 行中,當第一次列印 x 時,尚未設定任何操作符,由於顯示的值不需要小數點,因此只顯示數位 6。

在第 11 行中,當第二次列印 x 時,由於已經設定了 showpoint 操作符,因此會顯示小數點並且在後面跟零。但是由於 setprecision 操作符尚未設定,無法控制要列印多少零,所以按預設的 6 個有效數顯示 6.00000。

在第 12 行中,當第三次列印 x 時,setprecision 操作符已經設定。但是,由於 fixed 尚未設定,而 setprecision(2) 表示應顯示兩個有效數,所以顯示的是 6.0。

最後,在第 13 行中,當列印最後一個 x 時,fixed 和 setprecision 操作符兩者都被設定,指定要列印兩位小數,因此顯示結果為 6.00。

實際上,當同時使用 fixed 和 setprecision 操作符時,不需要使用 showpoint 操作符。來看以下語句:

cout << fixed << setprecision(2);

該語句將在兩個小數位前面自動顯示一個小數點。不過,許多程式設計師更喜歡使用以下語句:

cout << fixed << showpoint << setprecision(2);