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;
