J'ai besoin de stocker un double sous forme de chaîne. Je sais que je peux l'utiliser printf
si je voulais l'afficher, mais je veux juste le stocker dans une variable de chaîne afin que je puisse le stocker dans une carte plus tard (comme valeur , pas comme clé ).
171
Réponses:
La manière boost (tm) :
La manière standard C ++ :
Remarque : n'oubliez pas
#include <sstream>
la source
#include <sstream>
pour la manière c ++ :)#include <sstream>
, vous obtiendrez une erreur "type incomplet n'est pas autorisé".la source
operator <<
renvoie astd::ostream&
plutôt que astringstream&
.to_string
fonction. J'utilise Microsoft Visual C ++ 2013.La méthode Standard C ++ 11 (si vous ne vous souciez pas du format de sortie):
to_string
est une nouvelle fonction de bibliothèque introduite dans N1803 (r0), N1982 (r1) et N2408 (r2) " Simple Numeric Access ". Il existe également lastod
fonction pour effectuer l'opération inverse.Si vous souhaitez avoir un format de sortie différent de celui
"%f"
, utilisez les méthodessnprintf
ouostringstream
comme illustré dans d'autres réponses.la source
8.0
cela me donne la corde"8.000000"
, tout"8"
irait parfaitement bien.1e-9
produit0.000000
Si vous utilisez C ++, évitez
sprintf
. C'est un-C ++ y et a plusieurs problèmes. Stringstreams est la méthode de choix, de préférence encapsulée comme dans Boost.LexicalCast qui peut être fait assez facilement:Usage:
la source
Vous pouvez utiliser std :: to_string en C ++ 11
la source
std::to_string()
renvoyaient simplement 0,000000 et non sous forme scientifique.sprintf
c'est bien, mais en C ++, la meilleure façon, la plus sûre et aussi légèrement plus lente de faire la conversion est avecstringstream
:Vous pouvez également utiliser Boost.LexicalCast :
Dans les deux cas,
str
devrait être"453.23"
après. LexicalCast présente certains avantages en ce sens qu'il garantit que la transformation est complète. Il utilisestringstream
s en interne.la source
Je regarderais la bibliothèque C ++ String Toolkit . Je viens de publier une réponse similaire ailleurs. Je l'ai trouvé très rapide et fiable.
la source
Herb Sutter a un excellent article sur le formatage des chaînes . Je recommande de le lire. Je l'ai déjà lié sur SO.
la source
Le problème avec lexical_cast est l'incapacité de définir la précision. Normalement, si vous convertissez un double en chaîne, c'est parce que vous souhaitez l'imprimer. Si la précision est trop ou trop faible, cela affectera votre sortie.
la source
Vous pouvez également utiliser stringstream .
la source
Heh, je viens d'écrire ceci (sans rapport avec cette question):
la source
Vous voudrez peut-être lire mon article précédent sur SO. (Version macro avec un objet ostringstream temporaire.)
Pour mémoire: dans mon propre code, je préfère snprintf (). Avec un tableau char sur la pile locale, ce n'est pas si inefficace. (Eh bien, peut-être si vous avez dépassé la taille du tableau et que vous avez fait une boucle pour le faire deux fois ...)
(Je l'ai également enveloppé via vsnprintf (). Mais cela me coûte une vérification de type. Yelp si vous voulez le code ...)
la source
Jetez un oeil à
sprintf()
et famille.la source
Normalement, pour ces opérations, vous devez utiliser les fonctions ecvt, fcvt ou gcvt:
En tant que fonction:
la source
Vous pouvez essayer un style plus compact:
la source
Utilisez
to_string()
.exemple :
lancez-le vous-même: http://ideone.com/7ejfaU
Ils sont également disponibles:
la source
Vous pouvez convertir n'importe quoi en n'importe quoi en utilisant cette fonction:
utilisation:
la source