如何使浮动使用逗号而不是点

How to make that a float use comma and not point?

本文关键字:何使浮      更新时间:2023-10-16

我想创建一个运算符<lt;使用本地设置的,或者如果不是,至少可以手动将小数分隔符的"."改为","。我喜欢一种让流(iostream、fstream等)这样做的方法,而不是创建字符串然后打印它。

这可能吗?

您可以在流中注入一个numpunct方面。我相信这样的东西应该对你有用:

template <typename T>
struct comma_separator : std::numpunct<T>
{
    typename std::numpunct<T>::char_type do_decimal_point() const
    {
        return ',';
    }
};
template <typename T>
std::basic_ostream<T>& comma_sep(std::basic_ostream<T>& os)
{
    os.imbue(std::locale(std::locale(""), new comma_separator<T>));
    return os;
}
int main()
{
    std::cout << comma_sep << 3.14; // 3,14
}

这是一个演示。


使用欧洲语言环境的较短解决方案:

std::cout.imbue(
    std::locale(
        std::cout.getloc(), new std::numpunct_byname<char>("de_DE.utf8")));

但最终它取决于您的系统提供的区域设置。