C++中的千位分隔符
Posted
技术标签:
【中文标题】C++中的千位分隔符【英文标题】:Thousand separator in C++ 【发布时间】:2010-11-12 09:35:52 【问题描述】:我想在 C++ 中创建一个格式如下的字符串:
string + numbersWithFormatAndThousandSeparator + string
我不确定std::string
或snprintf()
是否提供类似的格式,尤其是千位分隔符。有人可以帮我解决这个问题吗?
【问题讨论】:
【参考方案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】:<clocale>
标头中提供了用于格式化数值的信息(包括千位分隔符)。该标头提供了一个 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++中的千位分隔符的主要内容,如果未能解决你的问题,请参考以下文章