58


10

C ++でfloatをstd :: stringに変換
`std

string`に入れる必要があるfloat値があります。 フロートから文字列に変換するにはどうすればよいですか?

float val = 2.5;
std::string my_val = val; // error here

7 Answer


105


C 11の時点で、標準C ライブラリは、関数http://www.cplusplus.com/reference/string/to_string/ [`std

to_string(arg)`]を提供します。


51


パフォーマンスが心配でない限り、http://en.cppreference.com/w/cpp/io/basic_ostream/operator_ltlt [string streams]を使用します。

std::ostringstream ss;
ss << myFloat;
std::string s(ss.str());

Boostに問題がない場合は、http://www.boost.org/doc/libs/1_41_0/libs/conversion/lexical_cast.htm [lexical_cast <>]が便利な代替手段です。

std::string s = boost::lexical_cast(myFloat);

効率的な代替手段は、たとえば FastFormatまたは単にCスタイルの関数。


16


ダブルだけでなく、他のタイプでも機能するテンプレートを定義できます。

template  string tostr(const T& t) {
   ostringstream os;
   os<

その後、他のタイプに使用できます。

double x = 14.4;
int y = 21;

string sx = tostr(x);
string sy = tostr(y);


12


重要:+最後のメモを読んでください。

クイックアンサー: + `to_string()`を使用します。 (c ++ 11以降で使用可能)+例:

#include
#include

using namespace std;
int main ()
{
    string pi = "pi is " + to_string(3.1415926);
    cout<< "pi = "<< pi << endl;

  return 0;
}

自分で実行してください。http://ideone.com/7ejfaUこれらも利用できます。

string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);

重要な注意: + @MichaelKonečnýが正当に指摘したように、 `to_string()`を使用することはせいぜい危険であり、予期しない結果を引き起こす可能性が非常に高いです。 + http://en.cppreference.com/w/cpp/string/basic_string/to_stringから:

_ 浮動小数点型の場合、返される文字列の有効桁数がゼロになる可能性があるため、 std :: to_string`は*予期しない結果をもたらす可能性があります。例を参照してください。 +戻り値は、デフォルトで `std :: cout`が出力するものとは大きく異なる場合があります。例を参照してください。 `std :: to_string`はフォーマットの目的で現在のロケールに依存しているため、複数のスレッドからの std :: to_string`の同時呼び出しは、呼び出しの部分的なシリアル化につながる可能性があります。 C ++ 17`は、ロケールに依存しない高性能な代替手段として std :: to_chars`を提供します。 _

最良の方法は、https://stackoverflow.com/a/2125908/2736559 [彼の答え]で示されている@dcpなどの他の `stringstream`を使用することです。

この問題は次の例で示されています:+自分で例を実行します:https://www.jdoodle.com/embed/v0/T4k

#include
#include
#include

template < typename Type > std::string to_str (const Type & t)
{
  std::ostringstream os;
  os << t;
  return os.str ();
}

int main ()
{

  // more info : https://en.cppreference.com/w/cpp/string/basic_string/to_string
  double    f = 23.43;
  double    f2 = 1e-9;
  double    f3 = 1e40;
  double    f4 = 1e-40;
  double    f5 = 123456789;
  std::string f_str = std::to_string (f);
  std::string f_str2 = std::to_string (f2); // Note: returns "0.000000"
  std::string f_str3 = std::to_string (f3); // Note: Does not return "1e+40".
  std::string f_str4 = std::to_string (f4); // Note: returns "0.000000"
  std::string f_str5 = std::to_string (f5);

  std::cout << "std::cout: " << f << '\n'
    << "to_string: " << f_str << '\n'
    << "ostringstream: " << to_str (f) << "\n\n"
    << "std::cout: " << f2 << '\n'
    << "to_string: " << f_str2 << '\n'
    << "ostringstream: " << to_str (f2) << "\n\n"
    << "std::cout: " << f3 << '\n'
    << "to_string: " << f_str3 << '\n'
    << "ostringstream: " << to_str (f3) << "\n\n"
    << "std::cout: " << f4 << '\n'
    << "to_string: " << f_str4 << '\n'
    << "ostringstream: " << to_str (f4) << "\n\n"
    << "std::cout: " << f5 << '\n'
    << "to_string: " << f_str5 << '\n'
    << "ostringstream: " << to_str (f5) << '\n';

  return 0;
}

出力:

std::cout: 23.43
to_string: 23.430000
ostringstream: 23.43

std::cout: 1e-09
to_string: 0.000000
ostringstream: 1e-09

std::cout: 1e+40
to_string: 10000000000000000303786028427003666890752.000000
ostringstream: 1e+40

std::cout: 1e-40
to_string: 0.000000
ostringstream: 1e-40

std::cout: 1.23457e+08
to_string: 123456789.000000
ostringstream: 1.23457e+08


5


C 11ではhttp://en.cppreference.com/w/cpp/string/basic_string/to_string[std::to_string]を使用できます。

float val = 2.5;
std::string my_val = std::to_string(val);


2


パフォーマンスが心配な場合は、http://www.boost.org/doc/libs/1_41_0/libs/conversion/lexical_cast.htm [Boost

lexical_cast]ライブラリをご覧ください。


0


http://www.parashift.com/c++-faq-lite/convert-num-to-string.html [このチュートリアル]は、シンプルでありながらエレガントなソリューションを提供します。

#include
#include
#include

class BadConversion : public std::runtime_error {
public:
  BadConversion(std::string const& s)
    : std::runtime_error(s)
    { }
};

inline std::string stringify(double x)
{
  std::ostringstream o;
  if (!(o << x))
    throw BadConversion("stringify(double)");
  return o.str();
}
...
std::string my_val = stringify(val);