2010-02-24 4 views
2

Je développe en C++, en utilisant le framework Qt.long double à la chaîne

J'ai besoin de convertir une valeur long double en une chaîne (idéalement un QString, mais pourrait être autre chose). Jusqu'ici, j'ai toujours utilisé QString :: number() pour la conversion numérique-> chaîne, mais il n'y a pas de surcharge pour le type long double.

Merci

Répondre

2

QString a une fonction statique pour construire un QString d'un std :: string, donc la réponse de wheaties pourrait être réécrite comme:

#include <sstream> 
#include <QString> 
... 
QString qStringFromLongDouble(const long double myLongDouble) 
{ 
    std::stringstream ss; 
    ss << myLongDouble; 

    return QString::fromStdString(ss.str()); 
} 
+0

Également possible est 'return QString (ss.str(). C_str());' –

+0

@Adam: 'QString :: fromStdString()' peut utiliser la taille de 'std :: string'() pour éviter de compter le longueur de la chaîne. Si vous passez un 'const char *' à 'QString()', il doit alors recalculer ce qui est déjà connu. – Bill

+0

juste, bon à savoir. J'arrive généralement à éviter tout cela avec 'QString ("% 1 "). Arg (n)' mais il ne gère pas double long :) –

5

simple:

string convert(long double myLongDouble) { 
    stringstream blah; 
    blah << myLongDouble; 

    return blah.str(); 
} 

Avec Modèles:

template<class T> string convert(T _input) { 
    stringstream blah; 
    blah << _input; 

    return blah.str(); 
} 
+0

Suppose 'using namespace std;', non? –

+1

@Mike: il vaut mieux supposer 'utiliser std :: string; en utilisant std :: stringstream; ' – Bill

+0

En fait, j'utilise' std :: string' et 'std :: stringstream'. Je ne suis pas un grand fan de 'using'; comme '# include', il place les informations importantes hors de vue de la plupart des sources (les instructions' include 'et 'using' sont généralement au début du fichier source, donc vous devez regarder où vous êtes gagner du contexte). Je viens d'en parler parce qu'il y a un * lot * de programmeurs qui mettent 'using namespace std;' dans * tout * leur code et supposent que tout le monde le fait aussi. –

0

Boost a lexical_cast à cet effet. Il enveloppe à peu près la solution que les wheaties ont donnée dans un modèle de classe.

Questions connexes