Namespaces
Variants

std::numpunct<CharT>:: grouping, std::numpunct<CharT>:: do_grouping

From cppreference.net
ヘッダーで定義 <locale>
public :
std:: string grouping ( ) const ;
(1)
protected :
virtual std:: string do_grouping ( ) const ;
(2)
1) パブリックメンバー関数。最も派生したクラスのメンバー関数 do_grouping を呼び出します。
2) std::string を返します。各 char 要素には、 num_put::put() (したがって basic_ostream::operator<< も)によってフォーマットされた数値出力の各グループの桁数が格納されます。

この関数は文字列 vec を返します。これは整数値のベクトルとして使用されます(例えば、 " \003 " は3桁ごとのグループを指定し、 "3" は51桁ごとのグループを意味します)。各要素 vec [ i ] は、数値の整数部分における i 番目の桁グループの桁数を右から数えて表します: vec [ 0 ] は最右端のグループの桁数を保持し、 vec [ 1 ] は右から2番目のグループの桁数を保持します。最後の文字 vec [ vec. size ( ) - 1 ] によって示されるグループ化は、数値の(左側の)残りのすべての桁をグループ化するために繰り返し再利用されます。 vec [ i ] が非正または CHAR_MAX に等しい場合、対応する桁グループのサイズは無制限となります。

戻り値

グループを保持する型 std::string のオブジェクト。 std::numpunct の標準特殊化は空の文字列を返し、グループ化が行われないことを示します。典型的なグループ化(例: en_US ロケール)は " \003 " を返します。

#include <iostream>
#include <limits>
#include <locale>
struct space_out : std::numpunct<char>
{
    char do_thousands_sep()   const { return ' ';  } // スペースで区切る
    std::string do_grouping() const { return "\1"; } // 1桁ごとのグループ化
};
struct g123 : std::numpunct<char>
{
    std::string do_grouping() const { return "\1\2\3"; }
};
int main()
{
    std::cout << "Default locale: " << 12345678 << '\n';
    std::cout.imbue(std::locale(std::cout.getloc(), new space_out));
    std::cout << "Locale with modified numpunct: " << 12345678 << '\n';
    std::cout.imbue(std::locale(std::cout.getloc(), new g123));
    std::cout << "Locale with \\1\\2\\3 grouping: "
              << std::numeric_limits<unsigned long long>::max() << '\n'
              << "Same, for a floating-point number: "
              << std::fixed << 123456789.123456789 << '\n';
}

出力:

Default locale: 12345678
Locale with modified numpunct: 1 2 3 4 5 6 7 8
Locale with \1\2\3 grouping: 18,446,744,073,709,551,61,5
Same, for a floating-point number: 123,456,78,9.123457

関連項目

千の区切り文字として使用する文字を提供する
(仮想 protected メンバー関数)