fmt::格式化如何始终打印前n个带前导零的非零数字



给定三个浮点数

a = 1.0
b = 1.23456
c = 1.23456e-12

如果需要,我如何总是打印第一个n非零数字,前导零。n=6的期望输出:

1.00000
1.23456
0.00000000000123456

我尝试了fmt::format("{:.6f"}", number),但在最后一种情况下返回0.00000

没有内置的方法,但你可以在几个步骤:

  1. 使用指数表示法(e)的格式。
  2. 提取指数
  3. 使用固定表示法(f)调整精度以考虑指数。
  4. 例如:

#include <fmt/core.h>
void print(double n) {
auto s = fmt::format("{:e}", n);
auto exp = atoi(s.substr(s.find('e') + 1).c_str());
int precision = 6;
if (exp < 0) precision -= exp;
fmt::print("{:.{}f}n", n, precision - 1);
}
int main() {
print(1.0);
print(1.23456);
print(1.23456e-12);
}

这个打印:

1.00000
1.23456
0.00000000000123456

https://godbolt.org/z/16n8s7TG3

最新更新