printf 加倍,总长度固定

printf doubles with fixed overall length

我想将 printf 加倍,以便总长度始终相同,如果数字太长则四舍五入。

例如,总长度为 7:

double a = 1.23456789;
double b = 12.3456789;
double c = 123.456789;
printf("a: %f\n", a);
printf("b: %f\n", b);
printf("c: %f\n", c);

将打印:

a: 1.23457
b: 12.3457
c: 123.457

有没有简单的方法可以做到这一点?

printf("a: %.6g\nb: %.6g\nc: %.6g\n", a, b, c);

ideone

是的,有。有关 printf 转换说明符,请参阅 specifications。使用 # 到 select 替代形式 来保留尾随零。使用 g 获得具有固定总位数的表示。 .6 指定确切的位数。

printf("a: %#.6g\n", a);
printf("b: %#.6g\n", b);
printf("c: %#.6g\n", c);

6 位精度恰好是默认值,所以这也适用

printf("a: %#g\n", a);