防止大数字被格式化为这样的" 24.000.000"

时间:2014-05-14 17:42:56

标签: c++ iostream

我在我的int中插入了一些ostream,但是300025000123的大数字甚至数年都被格式化为3.00025.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;
}

1 个答案:

答案 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;
}