给定三个浮点数
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
。
没有内置的方法,但你可以在几个步骤:
- 使用指数表示法(
e
)的格式。 - 提取指数
- 使用固定表示法(
f
)调整精度以考虑指数。 例如:
#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