que tiene un valor flotante que debe ser puesto en un std::string
. ¿Cómo convierto de float a string?Convertir flotador para std :: string en C++
float val = 2.5;
std::string my_val = val; // error here
que tiene un valor flotante que debe ser puesto en un std::string
. ¿Cómo convierto de float a string?Convertir flotador para std :: string en C++
float val = 2.5;
std::string my_val = val; // error here
A menos que usted está preocupado por el rendimiento, utilice string streams:
std::ostringstream ss;
ss << myFloat;
std::string s(ss.str());
Si estás de acuerdo con Boost, lexical_cast<> es una alternativa conveniente:
std::string s = boost::lexical_cast<std::string>(myFloat);
alternativas eficientes son, por ejemplo, FastFormat o simplemente las funciones estilo C.
Esta será una solución adecuada teniendo en cuenta que estas funciones se llamarán raramente (redimensionando la ventana), pero ¿hay un método más eficiente? –
Y si no está de acuerdo con Boost, escriba su propia función de conversión léxica; son aproximadamente cinco líneas de código y constituyen una función de biblioteca muy útil (ver http://www.gotw.ca/publications/mill19.htm para la implementación básica). –
Si está preocupado por el rendimiento, echa un vistazo a la biblioteca Boost::lexical_cast.
Creo que quieres decir "si * no * te preocupa el rendimiento". 'boost :: lexical_cast' es la solución más pesada que puedes elegir. – Tom
Se puede definir una plantilla que trabajará no sólo acaba con dobles, pero con otros tipos también.
template <typename T> string tostr(const T& t) {
ostringstream os;
os<<t;
return os.str();
}
Luego puede usarlo para otros tipos.
double x = 14.4;
int y = 21;
string sx = tostr(x);
string sy = tostr(y);
Como de C++ 11, la biblioteca estándar de C++ proporciona la función std::to_string(arg)
con varios tipos soportados para arg
.
Tenga en cuenta el posible comportamiento inesperado de std :: to_string() cuando se trabaja con flotantes. (Vea el resultado de ejemplos en este enlace http://en.cppreference.com/w/cpp/string/basic_string/to_string). –
este merece ser promovido a la mejor respuesta porque la mayoría AMBIENTE acumulación tendría soporte para C++ 11 ya – deddebme
This tutorial da un simple, pero elegante, solución, que transcribo:
#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);
Uso to_string()
. (Disponible desde C++ 11)
ejemplo:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string pi = "pi is " + to_string(3.1415926);
cout<< "pi = "<< pi << endl;
return 0;
}
plazo usted mismo: http://ideone.com/7ejfaU
Estos están disponibles, así:
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);
conocimiento de cualquier posible comportamiento inesperado de std :: to_string() cuando se trabaja con los flotadores. (Vea el resultado de ejemplos en este enlace http://en.cppreference.com/w/cpp/string/basic_string/to_string). –
Puede utilizar std::to_string en C++ 11
float val = 2.5;
std::string my_val = std::to_string(val);
Encabeza, no copia respuestas copy-paste-submit-grace_period_edit. copiar-pegar-editar-enviarlos. En su lugar, obtenemos una bandera automática. Cuídate la próxima vez. Aclamaciones –
considerar leer el artículo de Herb Sutter "Los formateadores de Cuerda de Manor Farm" (http://www.gotw.ca/publications /mill19.htm). Proporciona ejemplos de cinco de las formas más comunes de formatear cosas y analiza sus ventajas y desventajas. –