C++ でフロートを文字列に変換する方法
胡金庫
2023年10月12日
- C++ でマクロ式を使用してフロート値を文字列に変換する
-
C++ で浮動小数点数を文字列に変換するには
std::to_string()
メソッドを使用する -
C++ でフロートを文字列に変換するには、
std::stringstream
クラスとstr()
メソッドを利用する
この記事では、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
著者: 胡金庫