【问题标题】:How do you set the cout locale to insert commas as thousands separators?你如何设置 cout 语言环境来插入逗号作为千位分隔符?
【发布时间】:2011-06-11 07:39:58
【问题描述】:

给定以下代码:

cout << 1000;

我想要以下输出:

1,000

这可以使用 std::locale 和 cout.imbue() 函数来完成,但我担心我可能会在这里遗漏一步。你能发现吗?我目前正在复制当前语言环境,并添加千位分隔符方面,但逗号从未出现在我的输出中。

template<typename T> class ThousandsSeparator : public numpunct<T> {
public:
    ThousandsSeparator(T Separator) : m_Separator(Separator) {}

protected:
    T do_thousands_sep() const  {
        return m_Separator;
    }

private:
    T m_Separator;
}

main() {
    cout.imbue(locale(cout.getloc(), new ThousandsSeparator<char>(',')));
    cout << 1000;
}

【问题讨论】:

标签: c++ formatting numbers number-formatting


【解决方案1】:

do_thousands_sep 的默认实现已经返回','。看起来您应该改写do_groupingdo_grouping 默认返回一个空字符串,表示没有分组。这意味着每组三位数字:

string do_grouping() const
{
    return "\03";
}

【讨论】:

  • “\03”代表什么?那是“文本结尾”的ASCII吗?如果有,为什么?
  • @Cory:do_grouping 返回一个字符串,该字符串被视为代表组大小的单字符数字数组。 "\03" 创建一个字符串,其中包含一个且只有一个数字值为 3 的字符,这意味着每个组将是 3 位数字。
  • 默认不是','。 C 本地不使用分组,否则它是本地特定的。
  • @Martin:我说的是默认返回的形式 do_thousands_sep 是 ','。它与“默认语言环境”不同。 “返回:用作数字组分隔符的字符。所需的特化返回 ',' 或 L','。”
猜你喜欢
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 2018-05-04
  • 1970-01-01
  • 2020-10-26
  • 1970-01-01
  • 2016-02-02
相关资源
最近更新 更多