C++ で浮動小数点数を 2 小数点に丸める
-
C++ で
printf
関数フォーマット指定子を使用して浮動小数点数を小数点以下 2 桁に丸める -
C++ で
fprintf
関数の書式指定子を使って浮動小数点数を 2 デシマルに丸める -
C++ で
std::setprecision
とstd::fixed
を使用して浮動小数点数を小数点以下 2 桁に丸める
この記事では、C++ で浮動小数点数を小数点以下 2 桁に丸めるいくつかの方法について説明します。
C++ で printf
関数フォーマット指定子を使用して浮動小数点数を小数点以下 2 桁に丸める
浮動小数点数には特別な 2 進表現があり、実数をマシンで正確に表現することはできません。したがって、浮動小数点数を操作して計算を行う場合は、丸め関数を使用するのが一般的です。ただし、この場合、数値の小数部分の特定の部分のみを出力する必要があります。
最初の解決策は、printf
関数を使用して、フォーマットされたテキストを stdout
ストリームに出力することです。float
番号の通常のフォーマット指定子-%f
は%.2f
に変更する必要があることに注意してください。後者の表記法では、数値から小数点以下 2 桁のみが出力されると同時に、一般的な数学規則に従って丸めが行われます。同様の表記法は、他のデータ型の形式指定子でも使用できることに注意してください。
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::vector;
int main() {
vector<double> floats{-3.512312, -21.1123, -1.99, 0.129, 2.5, 3.111};
for (auto &item : floats) {
printf("%.2f; ", item);
}
return EXIT_SUCCESS;
}
出力:
-3.51; -21.11; -1.99; 0.13; 2.50; 3.11;
C++ で fprintf
関数の書式指定子を使って浮動小数点数を 2 デシマルに丸める
fprintf
は、printf
呼び出しのような出力フォーマットを行うために使用できる別の関数であり、さらに、最初の引数として渡すことができる任意の FILE*
ストリームオブジェクトに書き込むことができます。次の例では、エラー報告とログ記録のための stdout
のバッファなしバージョンである stderr
ストリームへの出力を示しています。
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::vector;
int main() {
vector<double> floats{-3.512312, -21.1123, -1.99, 0.129, 2.5, 3.111};
for (auto &item : floats) {
fprintf(stderr, "%.2f; ", item);
}
return EXIT_SUCCESS;
}
出力:
-3.51; -21.11; -1.99; 0.13; 2.50; 3.11;
C++ で std::setprecision
と std::fixed
を使用して浮動小数点数を小数点以下 2 桁に丸める
または、I/O マニピュレータのライブラリにある std::setprecision
関数を std::fixed
と組み合わせて使用することもできます。後者は、浮動小数点入出力操作のデフォルトのフォーマットを変更するために使用されます。std::setprecision
と一緒に使用すると、結果は実数の固定精度になり、std::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> floats{-3.512312, -21.1123, -1.99, 0.129, 2.5, 3.111};
for (auto &item : floats) {
cout << setprecision(2) << fixed << item << "; ";
}
return EXIT_SUCCESS;
}
出力:
-3.51; -21.11; -1.99; 0.13; 2.50; 3.11;