Выходные числа с группировкой цифр (1000000 как 1,000,000 и т. Д.)
Хотя легко написать что-то, что делает это самостоятельно, я часто задавался вопросом, было ли что-то подобное в iomanip
или где-нибудь Однако я никогда не находил что-то полезное. В идеале, он должен быть чувствительным к локали (например, в Германии вы бы написали 1,234,567,89 как 1,234,567,89) и, следовательно, намного лучше, чем создавать запятую вручную.
1 ответ
Решение
В соответствии с этим потоком вы можете установить локаль в выходном потоке, выполнив что-то вроде:
#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;
}
Сам не пробовал, но это звучит разумно.