对不起我的英语不好。
我需要将双精度值转换为 CString,因为我需要做 AfxMessageBox(double_value);
我发现这个:
std::ostringstream ost;
ost << double_value;
std::cout << "As string: " << ost.str() << std::endl;
//AfxMessageBox(ost.str()); - Does not work.
我怎么能这样做?
对不起我的英语不好。
我需要将双精度值转换为 CString,因为我需要做 AfxMessageBox(double_value);
我发现这个:
std::ostringstream ost;
ost << double_value;
std::cout << "As string: " << ost.str() << std::endl;
//AfxMessageBox(ost.str()); - Does not work.
我怎么能这样做?
AfxMessageBox
需要一个CString
对象,因此将双精度格式设置为 aCString
并传递:
CString str;
str.Format("As string: %g", double);
AfxMessageBox(str);
编辑:如果您希望将值显示为整数(小数点后没有值),请改用:
str.Format("As string: %d", (int)double);
那是因为 ost.str() 不是 CString,而是 C++ 字符串对象。您需要将其转换为 CString: new CString(ost.str())
。
根据您需要的 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 相同的非类型保存问题。
请注意,双重转换取决于语言环境。小数分隔符将取决于您的位置。