我正在尝试使用新的stringstreams方法将某些float + int组合转换为某种格式,但试图查看是否有更好的方法来处理这个:
现在使用// string String = static_cast(&(ostringstream()<< Number)) - > str();一种模式 - 如何将其存储为格式的字符串形式 - “1.10(3)”。精度等于小数。这里的问题是这些值都不是常量。即使解决方案不能是内联函数或字符串流 - 只要它足够通用就可以了。另请注意,最后计划是将此字符串用于GDI文本字符串。
提前致谢 - 如果有人可以提供帮助的话。
这是我当前的示例代码(并寻找另一种有效的方法来完成此任务):
string Convert(float number,int decimals)
{
std::ostringstream buff;
buff<<setprecision(decimals)<<fixed<<number;
return buff.str();
}
float f=1.1; // this can have any values from 1,1.5 or 1.52
int decimals=2; //dynamic number - calculated by other means - not a fixed number
int i=3; // some dynamic number as well - calculated by other means
string s=Convert(f,decimals)+"("+Convert(i,0)+")"; // output - 1.10(3)
答案 0 :(得分:4)
您可以使用std::fixed
中定义的std::setprecision
,std::setw
,std::setfill
和<iomanip>
:
float f=1.1;
int decimals=2;
int i=3;
ostringstream ss;
ss << std::fixed << std::setprecision(decimals) << f << '(' << i << ')';
string str = ss.str();
哪个输出:
1.10(3)
您还可以配置字符串流并保持此配置:
ostringstream ss;
ss.precision(5);
ss.setf(std::ios::fixed);
修改强>
如果您真的想要:
,您仍然可以在一行中执行此操作string str = ((ostringstream&)(ostringstream() << fixed << setprecision(decimals) << f << '(' << i << ')')).str();
如果您想要LPCWSTR
(const wchar_t *
)而不是LPCSTR
(const char*
),则应使用wstringstream
代替stringstream
。
ostringstream ss;
string str = ss.str();
LPCSTR* c_str = str.c_str();
wostringstream wss;
wstring wstr = wss.str();
LPCWSTR* wc_str = wstr.c_str();
如果您想要LPCTSTR
(LPCSTR
或LPCWSTR
,如果定义了UNICODE
),您可以使用以下typedef
{/ p>}
typedef std::basic_string<TCHAR> tstring;
typedef std::basic_ostringstream<TCHAR , std::char_traits<TCHAR> > tstringstream;
tostringstream tss;
tstring tstr = tss.str();
LPCTSTR* tc_str = tstr.c_str();
如果您的项目中未定义char *
,则TCHAR为UNICODE
;如果wchar_t *
已定义,则为UNICODE
。