如何将float转换为LPCTSTR。 这是我的代码:
wchar_t buffer[256];
wsprintfW(buffer, L"%f", chart_data[0].x[i]);
m_Grid.SetItemText(i+1, 1, buffer);
当我运行此代码时,我在缓冲区中得到f。
答案 0 :(得分:1)
Windows API函数wsprintf
(其名称与C标准函数swprintf
容易混淆)不支持浮点。请注意,in the documentation,f
不是有效的类型指示符,因此它属于"如果百分号后跟一个没有任何意义的字符作为格式字段,角色没有格式化#34;导致格式字符串%f
为您提供您观察到的f
的结果。
一个简单的解决方法是使用您的语言的运行时库(例如swprintf
或std::to_string
或boost::lexical_cast
)来处理浮点值。
如果您确实想要避免使用语言运行时(例如,为了避免依赖Windows未附带的任何库),则VariantChangeType
支持wsprintf
不具备的其他转换(浮点值,货币,日期)。 VariantChangeType
用于您需要的特定转换的函数(以及为简单起见可以直接调用的函数)是VarBstrFromR8
,它的不同之处在于它分配了您需要的输出缓冲区。免费使用SysFreeString
。
#include <oleauto.h>
BSTR itemText;
VarBstrFromR8(chart_data[0].x[i], GetThreadLocale(), 0, &itemText);
m_Grid.SetItemText(i+1, 1, itemText);
SysFreeString(itemText);