2010-02-24 28 views
2

我在深化发展C++,使用Qt框架。长双串

我需要将long double的值转换为字符串(理想情况下为QString,但可能是其他内容)。

到目前为止,我一直用的QString ::号码()用于numerical->字符串转换,但没有超载的long double类型。

感谢

回答

2

的QString有一个静态函数构造从一个std为QString ::字符串,因此麦片的回答可以改写为:假定`使用命名空间std

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

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

也有可能是'返回的QString(ss.str()c_str());' – 2010-02-24 15:40:37

+0

@Adam:'的QString :: fromStdString()'可以使用'的std :: string'的大小(),以避免计数字符串的长度。如果你将'const char *'传递给'QString()',那么它必须重新计算已知的内容。 – Bill 2010-02-24 18:44:03

+0

没错,很高兴知道。我通常使用'QString(“%1”)来避免所有这些。arg(n)'但它不处理长整数:) – 2010-02-24 19:15:43

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

;',是吧? – 2010-02-24 15:08:48

+1

@Mike:最好假设'使用std :: string;使用std :: stringstream;' – Bill 2010-02-24 15:13:44

+0

其实,我使用'std :: string'和'std :: stringstream'。我不是'使用'的忠实粉丝;像'#include',它把重要的信息拿出来看的大部分源(即'#include'和'using'语句通常是在源文件的开头的,所以你必须从无论你是回头看获益背景)。我只是提出这个问题,因为有很多程序员把'using namespace std;'放在* all *的代码中,并假设其他人都这样做。 – 2010-02-26 05:13:03

0

升压具有lexical_cast用于这一目的。它几乎包装了小麦子给课堂模板的解决方案。