对字符串流使用本地小数分隔符,但不使用分组字符

Use local decimal separator, but not grouping character, with stringstream

本文关键字:字符 小数 字符串 分隔符      更新时间:2023-10-16

可能的重复项:
在 c++ 中插入和删除整数中的逗号

我想像在当前区域设置

中一样使用小数分隔符写入双精度值,但我不希望它按当前区域设置中的分组字符进行分组。目前的方法

stringstream s;
s.imbue(std::locale(""));

仅解决其中一个问题。当前输出类似于 1,234.567 而不是想要的 1234.567

我该如何更改此设置?

在Dirkgently的帖子插入和删除整数的逗号的帮助下,我创建了以下类:

class no_grouping : public std::numpunct_byname<char> {
    std::string do_grouping() const { return ""; }
public:
    no_grouping() : numpunct_byname("") {}
};

这里重要的是从numpunkct_byname派生并使用本地区域设置的构造函数参数 " 对其进行初始化。

然后可以轻松地将流注入以下代码:

ostringstream stringBuff;
std::locale locale(std::locale(""),new no_grouping);
stringBuff.imbue(locale);

这将删除分组,但它将采用本地区域设置中的小数分隔符。