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

胡金庫 2023年10月12日
  1. setprecision() メソッドを使用して、カスタム精度をフロートに設定する
  2. setprecision()std::fixed() を用いて、カスタム精度をフロートに設定する
  3. setprecision()std::fixed() を用いて浮動小数点を 10 進数に整列させる
C++ で setprecision を使用する方法

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

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

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

以下の例は、cout 出力ストリームオブジェクトに浮動小数点数の精度を設定する方法を示しています。なお、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,     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 <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,     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 進数に整列させる

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

#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,     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
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

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

LinkedIn Facebook

関連記事 - C++ Float