C++ で setprecision を使用する方法

  1. setprecision() メソッドを使用して、カスタム精度をフロートに設定する
  2. setprecision()std::fixed() を用いて、カスタム精度をフロートに設定する
  3. setprecision()std::fixed() を用いて浮動小数点を 10 進数に整列させる

この記事では、C++ で setprecision メソッドを使用する方法について複数のメソッドを示します。

setprecision() メソッドを使用して、カスタム精度をフロートに設定する

setprecision() は入出力マニピュレータライブラリ <iomanip> に含まれ、浮動小数点数のデフォルトの精度を変更するために用いることができる。通常、setprecision() は I/O ストリームを持つ式の中で用いられる。

以下の例は、cout 出力ストリームオブジェクトに浮動小数点数の精度を設定する方法を示している。なお、setprecision() は整数部と小数部に適用され、指定された精度よりも大きな大きさの数値の場合には科学的な表記を用いる。

#include <iostream>
#include <iomanip>
#include <vector>

using std::cout; using std::endl;
using std::vector; using std::fixed;
using std::setprecision;

int main() {
    vector<double> d_vec = {123.231, 2.2343, 0.324, 0.012,
                            26.9491092019, 11013,
                            92.001112, 0.000000234};

    for (auto &i : d_vec) {
        cout << setprecision(3) << i << " | ";
    }
    cout << endl;

    return EXIT_SUCCESS;
}

出力:

123 | 2.23 | 0.324 | 0.012 | 26.9 | 1.1e+04 | 92 | 2.34e-07 |

setprecision()std::fixed() を用いて、カスタム精度をフロートに設定する

あるいは、setprecision()fixed() ストリームマニピュレータを併用して、小数点以下の桁数を同じにして浮動小数点値を表示することもできます。fixed() メソッドは数値の端数部分を固定長に設定し、デフォルトは 6 桁である。以下のコードサンプルでは、cout ストリームに出力し、出力に数値が挿入される前に両方のマニピュレータを呼び出しています。

#include <iostream>
#include <iomanip>
#include <vector>

using std::cout; using std::endl;
using std::vector; using std::fixed;
using std::setprecision;

int main() {
    vector<double> d_vec = {123.231, 2.2343, 0.324, 0.012,
                            26.9491092019, 11013,
                            92.001112, 0.000000234};

    for (auto &i : d_vec) {
        cout << fixed << setprecision(3) << i << " | ";
    }
    cout << endl;

    return EXIT_SUCCESS;
}

出力:

123.231 | 2.234 | 0.324 | 0.012 | 26.949 | 11013.000 | 92.001 | 0.000 |

setprecision()std::fixed() を用いて浮動小数点を 10 進数に整列させる

最後に、setw, right, setfill, fixed, setprecision マニピュレータを組み合わせて、小数点以下の位置に並んだ浮動小数点数を出力することができる。setw メソッドは、引数に渡された文字数で出力ストリームの幅を指定する。setfill は未使用のスペースを埋める文字を設定し、right メソッドは cout に充填操作を適用する側を指示します。

#include <iostream>
#include <iomanip>
#include <vector>

using std::cout; using std::endl;
using std::vector; using std::fixed;
using std::setprecision;

int main() {
    vector<double> d_vec = {123.231, 2.2343, 0.324, 0.012,
                            26.9491092019, 11013,
                            92.001112, 0.000000234};

    for (auto &i : d_vec) {
        cout << std::setw(10) << std::right
            << std::setfill(' ') << fixed
            << setprecision(4) << i << endl;
    }
    cout << endl;

    return EXIT_SUCCESS;
}

出力:

  123.2310
    2.2343
    0.3240
    0.0120
   26.9491
11013.0000
   92.0011
    0.0000
comments powered by Disqus