3

对不起我的英语不好。

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

我发现这个:

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

我怎么能这样做?

4

3 回答 3

13

AfxMessageBox需要一个CString对象,因此将双精度格式设置为 aCString并传递:

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

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

str.Format("As string: %d", (int)double);
于 2013-06-23T09:10:43.183 回答
0

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

于 2013-06-23T09:10:03.277 回答
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*or的构造函数const wchar_t*。std::string 或 std::wstring 没有构造函数。您还可以使用 CString.Format ,它具有与 sprintf 相同的非类型保存问题。

请注意,双重转换取决于语言环境。小数分隔符将取决于您的位置。

于 2013-06-23T09:28:13.510 回答