У меня есть значение float, которое нужно поместить в std::string
. Как преобразовать из float в строку?
float val = 2.5;
std::string my_val = val; // error here
У меня есть значение float, которое нужно поместить в std::string
. Как преобразовать из float в строку?
float val = 2.5;
std::string my_val = val; // error here
Если вы не обеспокоены производительностью, используйте строковые потоки:
std::ostringstream ss;
ss << myFloat;
std::string s(ss.str());
Если вы в порядке с Boost, lexical_cast < > является удобной альтернативой:
std::string s = boost::lexical_cast<std::string>(myFloat);
Эффективными альтернативами являются, например, FastFormat или просто функции стиля C.
Как и в С++ 11, стандартная библиотека С++ предоставляет функцию std::to_string(arg)
с различными поддерживаемыми типами для arg
.
Вы можете определить шаблон, который будет работать не только с удвоениями, но и с другими типами.
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);
Используйте 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);
Если вы беспокоитесь о производительности, ознакомьтесь с библиотекой Boost:: lexical_cast.
Вы можете использовать std:: to_string в С++ 11
float val = 2.5;
std::string my_val = std::to_string(val);
Этот учебник дает простое, но элегантное решение, которое я расшифровываю:
#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);