C++ で浮動小数点数を 2 小数点に丸める

胡金庫 2023年10月12日
  1. C++ で printf 関数フォーマット指定子を使用して浮動小数点数を小数点以下 2 桁に丸める
  2. C++ で fprintf 関数の書式指定子を使って浮動小数点数を 2 デシマルに丸める
  3. C++ で std::setprecisionstd::fixed を使用して浮動小数点数を小数点以下 2 桁に丸める
C++ で浮動小数点数を 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::setprecisionstd::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;
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

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

LinkedIn Facebook

関連記事 - C++ Float