2010-02-24 10 views
2

Я развиваюсь на C++, используя рамки Qt.long double to string

Мне нужно преобразовать значение long double в строку (в идеале QString, но может быть что-то еще).

До сих пор я всегда использовал QString :: number() для числового преобразования строки, но перегрузки для типа не существует.

Спасибо

ответ

2

QString имеет статическую функцию, чтобы построить QString из станда :: строки, так что ответ Wheaties' можно переписать в виде:

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

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

Также возможно: 'return QString (ss.str(). C_str());' –

+0

@Adam: 'QString :: fromStdString()' может использовать размер 'std :: string'(), чтобы избежать подсчета длина строки. Если вы передаете bare 'const char *' в 'QString()', тогда он должен пересчитать то, что уже известно. – Bill

+0

право, приятно знать. Я обычно избегаю всего этого с помощью 'QString («% 1 »). Arg (n)', но он не обрабатывает длинный двойной :) –

5

Простой:

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

    return blah.str(); 
} 

с использованием шаблонов:

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

    return blah.str(); 
} 
+0

'используя Принимает патезрас;', верно? –

+1

@Mike: лучше предположить 'using std :: string; using std :: stringstream; ' – Bill

+0

Фактически, я использую' std :: string' и 'std :: stringstream'. Я не большой поклонник 'use'; например, '# include', он помещает важную информацию из поля зрения большей части источника (т.е. операторы' # include' и 'using' обычно находятся в начале исходного файла, поэтому вам нужно оглянуться назад, где бы вы ни были контекст усиления). Я только что рассказал об этом, потому что есть * много * программистов, которые ставят 'using namespace std;' in * all * свой код и предполагают, что все остальные также делают. –

0

подталкивания имеет lexical_cast для этой цели. Это довольно много обертывает решение, которое пшеницы дают в шаблон класса.