5

できます

locale loc(""); // use default locale
cout.imbue( loc );
cout << << "i: " << int(123456) << " f: " << float(3.14) << "\n";

そしてそれは出力します:

i: 123.456 f: 3,14

私のシステムで。(ドイツ窓)

int の 3 桁区切りを取得したくないのですが、どうすればよいですか?

(ユーザーのデフォルト設定が必要ですが、千単位の区切り記号はありません。)

(私が見つけたのは、ファセットを使用して千単位の区切り記号を読み取る方法だけです...しかし、どうすればそれを変更できますか?)use_facetnumpunct

4

1 に答える 1

10

独自のnumpunctファセットを作成して浸透させるだけです。

struct no_separator : std::numpunct<char> {
protected:
    virtual string_type do_grouping() const 
        { return "\000"; } // groups of 0 (disable)
};

int main() {
    locale loc("");
    // imbue loc and add your own facet:
    cout.imbue( locale(loc, new no_separator()) );
    cout << "i: " << int(123456) << " f: " << float(3.14) << "\n";
}

別のアプリケーションが読み取る特定の出力を作成する必要がある場合は、オーバーライドすることもできますvirtual char_type numpunct::do_decimal_point() const;

_byname特定のロケールをベースとして使用する場合は、ファセットから派生できます。

template <class charT>
struct no_separator : public std::numpunct_byname<charT> {
    explicit no_separator(const char* name, size_t refs=0)
        : std::numpunct_byname<charT>(name,refs) {}
protected:
    virtual string_type do_grouping() const
        { return "\000"; } // groups of 0 (disable)
};

int main() {
    cout.imbue( locale(std::locale(""),  // use default locale
        // create no_separator facet based on german locale
        new no_separator<char>("German_germany")) );
    cout << "i: " << int(123456) << " f: " << float(3.14) << "\n";
}
于 2012-11-16T19:58:26.273 に答える