C++ で指定された小数点で数値を出力する方法

胡金庫 2023年10月12日
C++ で指定された小数点で数値を出力する方法

この記事では、C++ で指定された小数点の数値を出力する方法を紹介します。

精度を指定するには std::fixedstd::setprecision メソッドを使用する

このメソッドは、<iomanip> ヘッダで定義されている標準ライブラリのいわゆる I/O マニピュレータを使用します (完全なリストを参照)。これらの関数はストリームデータを変更することができ、主に I/O フォーマット操作に用いられます。最初の例では、fixed メソッドのみを利用しています。これは、浮動小数点値が固定小数点記法を用いて書かれるようにデフォルトの書式設定を変更するものです。ただし、結果は常に 6 ポイントの定義済みの精度を持つことに注意してください。

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

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

int main() {
  vector<double> d_vec = {123.231,   2.2343,       0.324,
                          10.222424, 6.3491092019, 110.12329403024,
                          92.001112, 0.000000124};

  for (auto &d : d_vec) {
    cout << fixed << d << endl;
  }
  return EXIT_SUCCESS;
}

出力:

123.231000
2.234300
0.324000
10.222424
6.349109
110.123294
92.001112
0.000000

あるいは、カンマの後の小数点を固定して、同時に精度の値を指定することもできます。次のコード例では、fixed 関数を setprecision と一緒に呼び出しています。

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

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

int main() {
  vector<double> d_vec = {123.231,   2.2343,       0.324,
                          10.222424, 6.3491092019, 110.12329403024,
                          92.001112, 0.000000124};

  for (auto &d : d_vec) {
    cout << fixed << setprecision(3) << d << endl;
  }
  return EXIT_SUCCESS;
}

出力:

123.231
2.234
0.324
10.222
6.349
110.123
92.001
0.000

前のコードサンプルでは最初の問題を解決していますが、出力はかなり混在しているようで、読みやすいフォーマットになっていません。関数 std::setwstd::setfill を用いれば、同じカンマ位置に並んだベクトル内の浮動小数点値を表示します。ことができます。これを実現するには、setw 関数を呼び出して cout に各出力の最大長を伝える必要があります (ここでは 8 を選択します)。次に、setfill 関数を呼び出してパディング位置を埋める char を指定します。最後に、以前に使用したメソッド (fixedsetprecision) を追加し、コンソールに出力します。

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

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

int main() {
  vector<double> d_vec = {123.231,   2.2343,       0.324,
                          10.222424, 6.3491092019, 110.12329403024,
                          92.001112, 0.000000124};

  for (auto &d : d_vec) {
    cout << setw(8) << setfill(' ') << fixed << setprecision(3) << d << endl;
  }
  return EXIT_SUCCESS;
}

出力:

123.231
  2.234
  0.324
 10.222
  6.349
110.123
 92.001
  0.000
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C++ Float