2

重複の可能性:
c++ での整数からのカンマの挿入と削除

現在のロケールのように小数点記号を使用して double 値を書き込みたいのですが、現在のロケールのグループ化文字でグループ化したくありません。との現在のアプローチ

stringstream s;
s.imbue(std::locale(""));

問題の 1 つだけを解決します。現在の出力は、必要な 1234.567 ではなく、1,234.567 のようなものです。

どうすればこれを変更できますか?

4

1 に答える 1

1

dirkgently の投稿の整数からのコンマの挿入と削除の助けを借りて、次のクラスを作成しました。

class no_grouping : public std::numpunct_byname<char> {
    std::string do_grouping() const { return ""; }

public:
    no_grouping() : numpunct_byname("") {}
};

ここで重要なのは、numpunkct_byname から派生させ、ローカル ロケールのコンストラクター パラメーター "" で初期化することです。

次に、ストリームに次のコードを簡単に埋め込むことができます。

ostringstream stringBuff;
std::locale locale(std::locale(""),new no_grouping);
stringBuff.imbue(locale);

これによりグループ化が削除されますが、ローカル ロケールから小数点記号が使用されます。

于 2012-05-22T11:55:30.183 に答える