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

編集

本当にしたい場合は、これを1行で行うことができます:

string str = ((ostringstream&)(ostringstream() << fixed << setprecision(decimals) << f << '(' << i << ')')).str();

LPCWSTR( const wchar_t *) の代わりにLPCSTR( ) が必要な場合は、の代わりにconst char*使用する必要があります。wstringstreamstringstream

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ます。UNICODEtypedef

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 *場合と定義されている場合です。UNICODEwchar_t *UNICODE

于 2013-04-25T12:32:21.113 に答える