C++ 带数字分组的输出数字(1000000为1000000,依此类推)

C++ 带数字分组的输出数字(1000000为1000000,依此类推),c++,localization,formatting,numbers,C++,Localization,Formatting,Numbers,虽然自己编写这样的东西很容易,但我经常想知道在iomanip或其他地方是否有类似的东西。然而,我从未发现有用的东西。理想情况下,它对区域设置非常敏感(例如,在德国,您将1234567.89写成1.234.567,89),因此比手工构建逗号字符串要优越得多。根据,您可以通过以下操作在输出流上设置区域设置: #include <iostream> #include <locale> #include <string> struct my_facet : publ

虽然自己编写这样的东西很容易,但我经常想知道在
iomanip
或其他地方是否有类似的东西。然而,我从未发现有用的东西。理想情况下,它对区域设置非常敏感(例如,在德国,您将1234567.89写成1.234.567,89),因此比手工构建逗号字符串要优越得多。

根据,您可以通过以下操作在输出流上设置区域设置:

#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;
}
#包括
#包括
#包括
结构my_facet:public std::numpunt{
显式my_方面(size_t refs=0):std::numpunct(refs){
虚拟字符do_数千_sep()常量{return',';}
虚拟std::string do_grouping()常量{return“\003”;}
};
int main(){
std::语言环境全局;
std::locale with groupings(全局、新my_方面);
std::locale was=std::cout.imbue(带分组);

std::cout在德国,小数点前没有四位数的组。显然,这是一个输入错误。我会更正它。感谢您让我知道可能的重复。可能的重复比我的完全手工版本好得多,可以解决我的问题,因为全自动本地化只会是一个很好的功能我的特定用例。不过,我想知道是否有一个预制/标准的解决方案使用了基于区域设置的特定方面。