使用STL获取系统的小数分隔符

时间:2017-12-15 15:39:07

标签: c++ stl

使用正确的数字分隔符('。'或',')生成csv文件,因为我希望它们与机器上安装的Excel版本兼容,需要从C ++程序中获取小数分隔符。

我的机器有法语版的Windows / Excel,因此小数点分隔符是','。

int main()
{
    std::cout << std::use_facet< std::numpunct<char> >(std::cout.getloc()).decimal_point();
    return 0;
}

输出.,这是不期望的

我尝试使用WIN32 API:

int main()
{
    TCHAR szSep[8];
    GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, szSep, 8);
    std::cout << szSep;
}

输出,,这是预期的。

STL中的这个GetLocaleInfo函数是否可以在简单的main内工作?

1 个答案:

答案 0 :(得分:0)

感谢user0042链接示例,使用STL执行此操作的适当方法是:

int main()
{
    // replace the C++ global locale as well as the C locale with the user-preferred locale
    std::locale::global(std::locale(""));
    // use the new global locale for future wide character output
    std::cout.imbue(std::locale());

    std::cout << std::use_facet< std::numpunct<char> >(std::cout.getloc()).decimal_point();
}

输出,,这是预期的。

或者,如果您不想改变全局:

int main()
{
    std::cout.imbue(std::locale(""));
    std::cout << std::use_facet< std::numpunct<char> >(std::cout.getloc()).decimal_point();
}