如何使用fmt库使用十进制逗号格式化浮点数?

时间:2019-07-03 06:38:55

标签: c++ fmt

我想使用fmt库来格式化浮点数。

我尝试用小数点分隔符','格式化浮点数,并尝试执行此操作但未成功:

#include <iostream>
#include <fmt/format.h>
#include <fmt/locale.h>

struct numpunct : std::numpunct<char> {
  protected:    
    char do_decimal_point() const override
    {
        return ',';
    }
};

int main(void) {
    std::locale loc;
    std::locale l(loc, new numpunct());
    std::cout << fmt::format(l, "{0:f}", 1.234567);
}

输出为1.234567。我想要1,234567

更新:

我浏览了fmt库的源代码,并认为小数点分隔符是浮点数的hard coded,并且不遵守当前语言环境。

我刚刚打开了一个issue in the fmt library

1 个答案:

答案 0 :(得分:3)

fmt库决定将语言环境作为第一个参数传递仅用于覆盖此调用的全局语言环境。根据设计,它不适用于具有f格式说明符的参数。

要使用语言环境设置来格式化浮点数,必须使用格式说明符n,例如:

std::locale loc(std::locale(), new numpunct());
std::cout << fmt::format(loc, "{0:n}", 1.234567);

n格式说明符从修订版1d3e3d开始支持浮点参数。