我想使用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);
}
Run Code Online (Sandbox Code Playgroud)
输出为1.234567。我想要1,234567
我浏览了fmt库的源代码,并认为小数点分隔符已硬编码为浮点数,并且不遵守当前语言环境。
fmt 库做出决定,将区域设置作为第一个参数传递只是为了覆盖此调用的全局区域设置。它不适用于带有f格式说明符的设计参数。
要使用语言环境设置格式化浮点数L,必须使用格式说明符,例如:
std::locale loc(std::locale(), new numpunct());
std::cout << fmt::format(loc, "{0:L}", 1.234567);
Run Code Online (Sandbox Code Playgroud)
从L修订版1d3e3d 开始,格式说明符支持浮点参数。