C++中的千位分隔符

Posted

技术标签:

【中文标题】C++中的千位分隔符【英文标题】:Thousand separator in C++ 【发布时间】:2010-11-12 09:35:52 【问题描述】:

我想在 C++ 中创建一个格式如下的字符串:

string + numbersWithFormatAndThousandSeparator + string

我不确定std::stringsnprintf() 是否提供类似的格式,尤其是千位分隔符。有人可以帮我解决这个问题吗?

【问题讨论】:

【参考方案1】:

快速简便的方法:

std::ostringstream ss;
ss.imbue(std::locale("en_US.UTF-8"));
ss << 1033224.23;
return ss.str();

将返回一个字符串“1,033,244.23”

但它需要在您的系统上配置 en_US.UTF-8 区域设置。

【讨论】:

这在一台机器上对我有用,但在另一台机器上失败了(“找不到语言环境”或其他东西。然后我简单地尝试了ss.imbue(std::locale(""));。这有效。我认为“”选择了默认语言环境您的系统,希望这将是您和您的用户想要的。请注意,locale() 失败(没有千位分隔符)。【参考方案2】:

C++ 语言环境:http://www.cplusplus.com/reference/std/locale/

【讨论】:

【参考方案3】:

&lt;clocale&gt; 标头中提供了用于格式化数值的信息(包括千位分隔符)。该标头提供了一个 lconv 结构,其中包含您需要的信息。特别是,该结构具有 char *thousands_sep 成员,这可能正是您所需要的。

有关所有详细信息,请参阅struct lconv 文档。

【讨论】:

【参考方案4】:

在 C++ 中有很多方法可以正确格式化数字。查看这篇文章中的一些(boost::lexical_cast 是我个人的最爱):http://www.cplusplus.com/articles/numb_to_text/

【讨论】:

除非我错过了如何,lexical_cast 不做千位分隔符? AFAIK lexical_cast 使用当前的全局语言环境。因此,如果语言环境中存在千位分隔符,它们将被正确解析/格式化。

以上是关于C++中的千位分隔符的主要内容,如果未能解决你的问题,请参考以下文章

如何显示或隐藏数字中的千位分隔符

sql SQL SERVVER中的千位分隔符

删除逗号,它是 R 中的千位分隔符

用户键入时,columnGridView 中的千位分隔符和逗号

格式化熊猫数据框中整数的千位分隔符

整个项目中所有数字的千位角分隔符