如何用逗号打印双精度数

Nom*_*meN 10 c++ floating-point double

在C++中,我有一个float/double变量.

当我用例如cout打印时,结果字符串是以句点分隔的.

cout << 3.1415 << endl
$> 3.1415
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方法可以强制双重打印逗号?

cout << 3.1415 << endl
$> 3,1415
Run Code Online (Sandbox Code Playgroud)

Éri*_*ant 12

imbue() cout使用localenumpunctfacet的decimal_point()成员函数返回逗号.

获得这样的locale可以通过几种方式完成.您可以使用系统上可用的命名区域设置(std::locale("fr")可能).或者,您可以派生自己的numpuct,do_decimal_point()在其中实现成员.

第二种方法的示例:

template<typename CharT>
class DecimalSeparator : public std::numpunct<CharT>
{
public:
    DecimalSeparator(CharT Separator)
    : m_Separator(Separator)
    {}

protected:
    CharT do_decimal_point()const
    {
        return m_Separator;
    }

private:
    CharT m_Separator;
};
Run Code Online (Sandbox Code Playgroud)

用作:

std::cout.imbue(std::locale(std::cout.getloc(), new DecimalSeparator<char>(',')));
Run Code Online (Sandbox Code Playgroud)