Выходные числа с группировкой цифр (1000000 как 1,000,000 и т. Д.) - PullRequest
9 голосов
/ 23 июля 2011

Хотя легко написать что-то, что делает это самостоятельно, я часто задавался вопросом, было ли что-то подобное в iomanip или где-то еще.Однако я никогда не находил что-то полезное.В идеале, он должен быть чувствительным к языковым настройкам (например, в Германии вы бы написали 1 234 567,89 как 1,234,567,89) и, следовательно, значительно превосходить создание запятой вручную.

1 Ответ

8 голосов
/ 23 июля 2011

Согласно этой теме , вы можете установить локаль в выходном потоке, выполнив что-то вроде:

#include <iostream>
#include <locale>
#include <string>

struct my_facet : public std::numpunct<char> {
    explicit my_facet(size_t refs = 0) : std::numpunct<char>(refs) {}
    virtual char do_thousands_sep() const { return ','; }
    virtual std::string do_grouping() const { return "\003"; }
};

int main() {
    std::locale global;
    std::locale withgroupings(global, new my_facet);
    std::locale was = std::cout.imbue(withgroupings);
    std::cout << 1000000 << std::endl;
    std::cout.imbue(was);

    return 0;
}

Сам не пробовал, но это, безусловно, звучит разумноподход.

...