我想用当前语言环境中的小数分隔符写双值,但我不希望它按当前语言环境中的分组字符分组。
目前的做法stringstream s;
s.imbue(std::locale(""));
只解决其中一个问题。当前输出类似于1,234.567而不是想要的1234.567
我该如何更改?
答案 0 :(得分:1)
在dirkgently的帖子inserting and removing commas from integers的帮助下,我创建了以下类:
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);
这将删除分组,但它将采用本地语言环境中的小数分隔符。