C++ でフロートを文字列に変換する方法

胡金庫 2023年10月12日
  1. C++ でマクロ式を使用してフロート値を文字列に変換する
  2. C++ で浮動小数点数を文字列に変換するには std::to_string() メソッドを使用する
  3. C++ でフロートを文字列に変換するには、std::stringstream クラスと str() メソッドを利用する
C++ でフロートを文字列に変換する方法

この記事では、C++ でフロート値を文字列に変換する方法をいくつか紹介します。

C++ でマクロ式を使用してフロート値を文字列に変換する

プリプロセッサマクロを使用して、定数浮動小数点数を文字列値に変換することができます。注意しなければならないのは、この解決策はリテラル浮動小数点数の変換にのみ適用されるということです。次のコード例は、文字列化マクロを使って文字列変数のコンストラクタ文を呼び出す方法を示しています。マクロ STRING は、# 演算子を使用して、渡された引数を文字列定数に変換します。

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

#define STRING(num) #num

int main() {
  string num_str(STRING(123.456));
  num_str.empty() ? cout << "empty\n" : cout << num_str << endl;

  return EXIT_SUCCESS;
}

出力:

123.456

浮動小数点定数が別のマクロ式として定義されている場合、次のコードセグメントに示すように正しい結果を得るためには、上記のコードを 2 レベルのマクロで置き換える必要があります。

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

#define STRING(num) STR(num)
#define STR(num) #num

#define NUMBER 123.456

int main() {
  string num_str(STRING(NUMBER));
  num_str.empty() ? cout << "empty\n" : cout << num_str << endl;

  return EXIT_SUCCESS;
}

出力:

123.456

C++ で浮動小数点数を文字列に変換するには std::to_string() メソッドを使用する

関数 to_string<string> ヘッダで定義されており、様々な数値型を string に変換することができます。このメソッドは数値をパラメータとして受け取り、std::string の値を返します。戻り値の文字列の有効桁数が 0 になることがあるので、to_string は予期せぬ結果を返す可能性があることに注意してください。

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

int main() {
  float n1 = 123.456;
  double n2 = 0.456;
  double n3 = 1e-40;
  string num_str1(std::to_string(n1));
  string num_str2(std::to_string(n2));
  string num_str3(std::to_string(n3));
  num_str1.empty() ? cout << "empty\n" : cout << num_str1 << endl;
  num_str2.empty() ? cout << "empty\n" : cout << num_str2 << endl;
  num_str3.empty() ? cout << "empty\n" : cout << num_str3 << endl;

  return EXIT_SUCCESS;
}

出力:

123.456001
0.456000
0.000000

C++ でフロートを文字列に変換するには、std::stringstream クラスと str() メソッドを利用する

std::stringstream は文字列オブジェクトに対する入出力操作を行うための強力なクラスです。この解決策では、これを利用して単一の浮動小数点型変数を stringstream オブジェクトに挿入します。そして、組み込みの str メソッドを呼び出して string オブジェクトに数値型を処理します。戻り値の string は一時的なオブジェクトなので、結果に対して他のメソッドを呼び出すとポインタがぶら下がってしまうことに注意してください (例でコメントアウトされている行を参照してください)。

#include <iostream>
#include <sstream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

int main() {
  float n1 = 123.456;
  std::stringstream sstream;

  sstream << n1;
  string num_str = sstream.str();
  // auto *ptr = sstream.str().c_str(); // RESULTS in dangling pointer
  num_str.empty() ? cout << "empty\n" : cout << num_str << endl;

  return EXIT_SUCCESS;
}

出力:

123.456
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

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

LinkedIn Facebook

関連記事 - C++ Float