我在我的int
中插入了一些ostream
,但是3000
或25000123
的大数字甚至数年都被格式化为3.000
或25.000.123
。
我不确定为什么会这样。可能是因为我在流上使用了imbue("")
所以十进制数字显示为14,53
而不是14.53
,但我评论说这一行和所有内容都保持原样。
我只想在外流中获取数字时摆脱这些点(但我也不想删掉小数逗号)。我怎么能这样做?
我想也许iomanip
图书馆会有所帮助,但我找不到有关这种情况的任何内容。
std::ostream& operator <<(std::ostream& os, const Article& a) {
os << a.title() << a.pub_date().year() << ". " << a.price() << "";
return os;
}
答案 0 :(得分:1)
如果为数字指定自定义分组,则可以继续使用imbue
。
请在此处查看示例:http://www.cplusplus.com/reference/locale/numpunct/grouping/
以这个例子为例,我们有了这个代码,它验证即使设置了语言环境也没有进行分组。
// numpunct::grouping example
#include <iostream> // std::cout
#include <string> // std::string
#include <locale> // std::locale, std::numpunct, std::use_facet
// custom numpunct with grouping:
struct my_numpunct : std::numpunct<char> {
// the zero by itself means do no grouping
std::string do_grouping() const {return "\0";}
};
int main() {
std::locale loc (std::cout.getloc(),new my_numpunct);
std::cout.imbue(loc);
std::cout << "one million: " << 1000000 << '\n';
return 0;
}