Cómo convertir el float en cadena de caracteres en C++

Jinku Hu 12 octubre 2023
  1. Utiliza la expresión de macros para convertir un valor de flotante en una cadena de caracteres en C++
  2. Usa el método std::to_string() para convertir una constante de punto flotante en una cadena de caracteres en C++
  3. Use la clase std::stringstream y el método str() para convertir un float en una cadena en C++
Cómo convertir el float en cadena de caracteres 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
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Artículo relacionado - C++ Float