Cómo convertir el float en cadena de caracteres en C++
- Utiliza la expresión de macros para convertir un valor de flotante en una cadena de caracteres en C++
-
Usa el método
std::to_string()
para convertir una constante de punto flotante en una cadena de caracteres en C++ -
Use la clase
std::stringstream
y el métodostr()
para convertir un float en una cadena en C++
Este artículo presenta varios métodos para convertir un valor de flotante en una cadena de caracteres en C++.
Utiliza la expresión de macros para convertir un valor de flotante en una cadena de caracteres en C++
Se pueden utilizar macros de preprocesador para convertir un número de flotante constante en un valor de cadena. Una cosa a tener en cuenta es que esta solución sólo se aplica a la conversión literal de números de punto flotante. El siguiente ejemplo de código muestra cómo llamar a la sentencia constructora de variables string
con la macro de stringizing. La macro STRING
utiliza el operador #
para convertir los argumentos pasados a una constante de cadena.
#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;
}
Resultado:
123.456
En caso de que la constante de punto flotante se defina como otra expresión de macro, el código anterior debe ser sustituido por una macro de dos niveles para obtener resultados correctos como se muestra en el siguiente segmento de código:
#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;
}
Resultado:
123.456
Usa el método std::to_string()
para convertir una constante de punto flotante en una cadena de caracteres en C++
La función to_string
está definida en el encabezado <string>
y puede convertir varios tipos numéricos en un valor string
. El método toma un valor numérico como parámetro y devuelve el valor std::string
. Ten en cuenta que, to_string
puede devolver resultados inesperados ya que el número de dígitos significativos en la cadena devuelta puede ser cero como se demuestra en el código de ejemplo:
#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;
}
Resultado:
123.456001
0.456000
0.000000
Use la clase std::stringstream
y el método str()
para convertir un float en una cadena en C++
std::stringstream
es una clase poderosa para llevar a cabo operaciones de entrada/salida en objetos de cadena de caracteres. La utilizamos para insertar una única variable de punto flotante en el objeto stringstream
en esta solución. Luego llamamos al método incorporado str
para procesar el tipo numérico en el objeto string
. Nótese que la string
devuelta es un objeto temporal, así que llamar a otros métodos en el resultado producirá un puntero colgante (véase la línea comentada en el ejemplo).
#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;
}
Resultado:
123.456
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook