C ++ MFC加倍到CString

时间:2013-06-23 09:07:30

标签: c++ type-conversion

抱歉我的英文。

我需要将double值转换为CString,因为我需要做AfxMessageBox(double_value);

我发现了这个:

std::ostringstream ost;
ost << double_value;
std::cout << "As string: " << ost.str() << std::endl;
//AfxMessageBox(ost.str()); - Does not work.

我怎么能这样做?

3 个答案:

答案 0 :(得分:13)

AfxMessageBox需要CString个对象,因此请将双精度格式化为CString并传递:{/ p>

CString str;
str.Format("As string: %g", double);
AfxMessageBox(str);

编辑:如果您希望将值显示为整数(小数点后没有值),请改用:

str.Format("As string: %d", (int)double);

答案 1 :(得分:0)

那是因为ost.str()不是CString,而是C ++字符串对象。您需要将其转换为CString:new CString(ost.str())

答案 2 :(得分:0)

根据您需要的Unicode设置

std::ostringstream ost;
ost << std::setprecision(2) << double_value;
std::cout << "As string: " << ost.str() << std::endl;
AfxMessageBox(ost.str().c_str());

std::wostringstream ost;
ost << std::setprecision(2) << double_value;
std::wcout << L"As string: " << ost.str() << std::endl;
AfxMessageBox(ost.str().c_str());

这是必需的,因为CString具有const char*const wchar_t*的构造函数。 std :: string或std :: wstring没有构造函数。您也可以使用CString.Format,它具有与sprintf相同的notaveave问题。

请注意,双重转换取决于区域设置。十进制分隔符取决于您的位置。