Comment convertir un float en chaîne de caractères en C++

Jinku Hu 12 octobre 2023
  1. Utiliser la macro-expression pour convertir un float en chaîne de caractères en C++
  2. Utiliser la méthode std::to_string() pour convertir un float en chaîne de caractères en C++
  3. Utilisez la classe std::stringstream et la méthode str() pour convertir un float en chaîne de caractères en C++
Comment convertir un float en chaîne de caractères en C++

Cet article présente plusieurs méthodes de conversion d’une valeur float en une chaîne de caractères en C++.

Utiliser la macro-expression pour convertir un float en chaîne de caractères en C++

Les macros de préprocesseur peuvent être utilisées pour convertir un nombre float constant en une valeur de chaîne. Une chose à retenir est que cette solution ne s’applique qu’à la conversion littérale de nombres à virgule float. L’exemple de code suivant montre comment appeler l’instruction de constructeur de variable string avec la macro de stringing. La macro STRING utilise l’opérateur # pour convertir les arguments passés en une constante de chaîne.

#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;
}

Production:

123.456

Dans le cas où la constante à virgule float est définie comme une autre expression macro, le code ci-dessus doit être substitué par une macro à deux niveaux pour donner des résultats corrects comme indiqué dans le segment de code suivant:

#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;
}

Production:

123.456

Utiliser la méthode std::to_string() pour convertir un float en chaîne de caractères en C++

La fonction to_string est définie dans l’en-tête <string> et peut convertir divers types numériques en une valeur string. La méthode prend une valeur numérique comme paramètre et retourne la valeur std::string. Notez que, to_string peut retourner des résultats inattendus car le nombre de chiffres significatifs dans la chaîne retournée peut être zéro comme le montre le code de l’exemple:

#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;
}

Production:

123.456001
0.456000
0.000000

Utilisez la classe std::stringstream et la méthode str() pour convertir un float en chaîne de caractères en C++

std::stringstream est une classe puissante pour effectuer des opérations d’entrée/sortie sur des objets de type chaîne. Dans cette solution, nous l’utilisons pour insérer une seule variable à virgule float dans l’objet stringstream. Ensuite, nous appelons la méthode intégrée string pour traiter le type numérique de l’objet string. Notez que la string retournée est un objet temporaire, donc l’appel d’autres méthodes sur le résultat donnera un pointeur float (voir la ligne commentée dans l’exemple).

#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;
}

Production:

123.456
Auteur: 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

Article connexe - C++ Float