Je dispose d'une valeur flottante qui doit être placée dans un fichier std::string
. Comment convertir un flottant en chaîne de caractères ?
float val = 2.5;
std::string my_val = val; // error here
Je dispose d'une valeur flottante qui doit être placée dans un fichier std::string
. Comment convertir un flottant en chaîne de caractères ?
float val = 2.5;
std::string my_val = val; // error here
À partir de C++11, la bibliothèque standard C++ fournit la fonction std::to_string(arg)
avec différents types de support pour arg
.
Soyez conscient d'un éventuel comportement inattendu de std::to_string() lorsque vous travaillez avec des flottants. (Voir la sortie des exemples sur ce lien fr.cppreference.com/w/cpp/string/basic_string/to_string ).
À moins que vous ne soyez préoccupé par les performances, utilisez flux de chaînes :
#include <sstream>
//..
std::ostringstream ss;
ss << myFloat;
std::string s(ss.str());
Si vous êtes d'accord avec Boost, lexical_cast<> est une alternative pratique :
std::string s = boost::lexical_cast<std::string>(myFloat);
Les alternatives efficaces sont par exemple FastFormat ou simplement les fonctions de style C.
Ce sera une solution adéquate si l'on considère que ces fonctions seront appelées rarement (redimensionnement de la fenêtre), mais existe-t-il une méthode plus efficace ?
Et si vous n'êtes pas d'accord avec Boost, écrivez votre propre fonction de cast lexical ; cela ne représente qu'environ cinq lignes de code et constitue une fonction de bibliothèque des plus utiles (cf. gotw.ca/publications/mill19.htm pour l'implémentation de base).
Vous pouvez définir un modèle qui fonctionnera non seulement avec les doubles, mais aussi avec d'autres types.
template <typename T> string tostr(const T& t) {
ostringstream os;
os<<t;
return os.str();
}
Ensuite, vous pouvez l'utiliser pour d'autres types.
double x = 14.4;
int y = 21;
string sx = tostr(x);
string sy = tostr(y);
Si vous êtes inquiet au sujet des performances, consultez la page Boost::lexical_cast bibliothèque.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
4 votes
Pensez à lire l'article de Herb Sutter "The String Formatters of Manor Farm" ( gotw.ca/publications/mill19.htm ). Il fournit des exemples de cinq des manières les plus courantes de formater les choses et discute de leurs avantages et inconvénients.