C++ で setprecision を使用する方法
胡金庫
2023年10月12日
-
setprecision()
メソッドを使用して、カスタム精度をフロートに設定する -
setprecision()
とstd::fixed()
を用いて、カスタム精度をフロートに設定する -
setprecision()
とstd::fixed()
を用いて浮動小数点を 10 進数に整列させる
この記事では、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 進数に整列させる
最後に、setw
、right
、setfill
、fixed
、setprecision
マニピュレータを組み合わせて、小数点以下の位置に並んだ浮動小数点数を出力することができます。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
著者: 胡金庫