我有一个浮点数。我想在消息框中打印它。怎么做?
MessageBox(hWnd, "Result = <float>", L"Error", MB_OK);
更新
我这样做,它在消息框中打印出中文字符。
float fp = 2.3333f;
sprintf(buffer,"%f",fp);
MessageBox(hWnd, LPCWSTR(buffer), L"Error", MB_OK);
答案 0 :(得分:5)
当您使用wchar_t
版本的Win32功能时,应使用swprintf
代替sprintf
:
float fp = 2.3333f;
const size_t len = 256;
wchar_t buffer[len] = {};
swprintf(buffer, L"%f", fp);
MessageBox(hWnd, buffer, L"Error", MB_OK);
为避免潜在的缓冲区溢出,您还可以使用_snwprintf
:
float fp = 2.3333f;
const size_t len = 256;
wchar_t buffer[len] = {};
_snwprintf(buffer, len - 1, L"%f", fp);
MessageBox(hWnd, buffer, L"Error", MB_OK);
或者更好的是,使用std::wostringstream
中声明的<sstream>
:
float fp = 2.3333f;
std::wostringstream ss;
ss << fp;
MessageBox(hWnd, ss.str().c_str(), L"Error", MB_OK);
答案 1 :(得分:3)
您正在使用Unicode版本的MessageBox,这就是为什么您必须使用L前缀指定“Error”字符串 - 这告诉它应该使用宽(16位)字符。正如dalle所说,这意味着你必须将缓冲区指定为wchar_t,并使用相应的printf的wchar_t版本。
你会看到中文字符,因为它将你的字符串解释为一串wchar_t。毕竟,您明确地将缓冲区转换为wchar_t字符串。
答案 2 :(得分:1)
您必须使用%f格式代码将消息打印到缓冲区,然后在MessageBox()
中使用它