将float转换为LPCTSTR转换

时间:2017-04-11 13:50:27

标签: c++

如何将float转换为LPCTSTR。 这是我的代码:

wchar_t buffer[256];
wsprintfW(buffer, L"%f", chart_data[0].x[i]);
m_Grid.SetItemText(i+1, 1, buffer);

当我运行此代码时,我在缓冲区中得到f。

1 个答案:

答案 0 :(得分:1)

Windows API函数wsprintf(其名称与C标准函数swprintf容易混淆)不支持浮点。请注意,in the documentationf不是有效的类型指示符,因此它属于"如果百分号后跟一个没有任何意义的字符作为格式字段,角色没有格式化#34;导致格式字符串%f为您提供您观察到的f的结果。

一个简单的解决方法是使用您的语言的运行时库(例如swprintfstd::to_stringboost::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);