Как установить язык cout для вставки запятых в качестве разделителей тысяч? - PullRequest
8 голосов
/ 18 января 2011

С учетом следующего кода:

cout << 1000;

Я хотел бы следующий вывод:

1,000

Это можно сделать, используя std :: locale и функцию cout.imbue (), но я боюсь, что здесь я могу пропустить шаг. Вы можете это заметить? В настоящее время я копирую текущую локаль и добавляю фасет с разделителем тысяч, но в моем выводе запятая никогда не появляется.

template<typename T> class ThousandsSeparator : public numpunct<T> {
public:
    ThousandsSeparator(T Separator) : m_Separator(Separator) {}

protected:
    T do_thousands_sep() const  {
        return m_Separator;
    }

private:
    T m_Separator;
}

main() {
    cout.imbue(locale(cout.getloc(), new ThousandsSeparator<char>(',')));
    cout << 1000;
}

1 Ответ

6 голосов
/ 18 января 2011

Реализация по умолчанию do_thousands_sep уже возвращает ','.Похоже, вы должны вместо do_grouping переопределить.do_grouping возвращает пустую строку по умолчанию, что означает отсутствие группировки.Это означает группы по три цифры в каждой:

string do_grouping() const
{
    return "\03";
}
...