c++ - 如何为 Boost.Locale 中的数字指定自定义小数分隔符?
问题描述
我已经多次阅读 Boost.Locale 文档,但仍然找不到这个看似简单的问题的答案:我需要使用特定的语言环境(例如 ru_RU)输出,但使用自定义的小数分隔符(例如点代替逗号)。这可能吗?
对于日期,有允许指定自定义日期时间格式字符串的“ftime”操纵器。但是数字有类似的东西吗?
谢谢!
解决方案
为了完整起见,我将发布我是如何解决问题的。假设我们有一个locale
对象并且需要使用自定义小数点字符sep
:
template <class charT>
class DecimalPointFacet : public std::numpunct<charT> {
charT _sep;
public:
explicit DecimalPointFacet(charT sep): _sep(sep) {}
protected:
[[nodiscard]] charT do_decimal_point() const override
{
return _sep;
}
[[nodiscard]] typename std::numpunct<charT>::string_type do_grouping() const override
{
return "\0";
}
};
// ...
std::locale locale = obtainLocale();
const char sep = obtainDecimalSeparator();
locale = std::locale(locale, new DecimalPointFacet<char>(sep);
std::cout.imbue(locale);
std::cout << someNumber;
另请注意,DecimalPointFacet 会关闭数字分组,这对我来说也很方便(如果您不需要,请删除do_grouping
覆盖)。
推荐阅读
- r - 错误:客户端错误:r 编程中的(403)PERMISSION_DENIED
- c++ - libstdc++实现std::declval的问题
- php - 检查纬度和经度是否在PHP中的圆圈内
- javascript - Discord bot 未提供目标用户名
- intellij-idea - 为什么将 IntelliJ 我的已弃用的 groovy 构造函数标记为未弃用
- mysql - Linux - 安装 MySQL ODBC 驱动程序 - 错误
- php - 有没有处理不同类型缩进的好方法
- android - 使用 react-native android 清除通知 - 放大和精确定位
- java - 在 java spring 中添加年龄字段异常的自定义验证
- javascript - 在 React 中使用 Rest 调用将 URL 设置为超链接