Подтвердить что ты не робот

Преобразовать float в std::string в С++

У меня есть значение float, которое нужно поместить в std::string. Как преобразовать из float в строку?

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

Ответ 1

Если вы не обеспокоены производительностью, используйте строковые потоки:

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

Если вы в порядке с Boost, lexical_cast < > является удобной альтернативой:

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

Эффективными альтернативами являются, например, FastFormat или просто функции стиля C.

Ответ 2

Как и в С++ 11, стандартная библиотека С++ предоставляет функцию std::to_string(arg) с различными поддерживаемыми типами для arg.

Ответ 3

Вы можете определить шаблон, который будет работать не только с удвоениями, но и с другими типами.

template <typename T> string tostr(const T& t) { 
   ostringstream os; 
   os<<t; 
   return os.str(); 
} 

Затем вы можете использовать его для других типов.

double x = 14.4;
int y = 21;

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

Ответ 4

Используйте to_string(). (доступно с С++ 11)
Пример:

#include <iostream>   
#include <string>  

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);

Ответ 5

Если вы беспокоитесь о производительности, ознакомьтесь с библиотекой Boost:: lexical_cast.

Ответ 6

Вы можете использовать std:: to_string в С++ 11

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

Ответ 7

Этот учебник дает простое, но элегантное решение, которое я расшифровываю:

#include <sstream>
#include <string>
#include <stdexcept>

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);