1

我正在尝试使用新的 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)
4

1 回答 1

6

您可以使用std::fixedstd::setprecisionstd::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)

您还可以配置 stringstream 并保留此配置:

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();

如果你想要一个LPCTSTRLPCSTR或者LPCWSTR如果UNICODE被定义),你可以使用typedef这样的:

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();

TCHAR 是一个char *ifUNICODE没有在你的项目中定义并且一个wchar_t *ifUNICODE被定义。

于 2013-04-25T12:32:21.113 回答