我想在小数点后最多打印 6 位,所以我使用了以下内容:
printf("%.6g",0.127943989);
的输出printf
是 0.127944 这是正确的,但是当我尝试这个时:
printf("%.6g",0.007943989);
输出变成了 0.00794399,这不是我期望看到的!
似乎printf
忽略了小数点后的零。那么如何强制它输出最大 6 位精度呢?
我想在小数点后最多打印 6 位,所以我使用了以下内容:
printf("%.6g",0.127943989);
的输出printf
是 0.127944 这是正确的,但是当我尝试这个时:
printf("%.6g",0.007943989);
输出变成了 0.00794399,这不是我期望看到的!
似乎printf
忽略了小数点后的零。那么如何强制它输出最大 6 位精度呢?
是"%f"
格式说明符:
printf("%.6f\n",0.007943989) // prints 0.007944
你在找什么?请记住,如果数字允许,这不会自动切换到%e
格式样式,因此这可能也不是您要寻找的。
例如,以下内容:
printf("%.6g\n",0.00007943989);
printf("%.6f\n",0.00007943989);
印刷:
7.94399e-005
0.000079
并且不清楚您是否想要提供的较小数字的指数形式"%g"
。
请注意,对于精度规范的处理方式,规范%f
和%g
的行为略有不同。
%f
:“小数点字符后的位数等于精度规范”%g
:“具有指定有效位数的精度”并且小数点后的零不计入有效数字(这解释了您看到的行为%g
)。
ISO C 标准要求
可选精度,形式为句点 ('.'),后跟可选的十进制数字字符串... 这给出 ... g和G转换的最大有效位数
这是使用 GNU libc(GCC 4.5.1、libc 2.11;GCC 4.6.3、libc 2.15)获得的输出
printf("%.6g\n", 0.12);
0.12
printf("%.6g\n", 0.1234567890);
0.123457
printf("%.6g\n", 0.001234567890);
0.00123457
printf("%#.6g\n", 0.001234567890);
0.00123457
printf("%.6g\n", 0.00001234567890);
1.23457e-05
printf("%#.6g\n", 0.00001234567890);
1.23457e-05
printf("%.6f\n", 0.12);
0.120000
printf("%.6f\n", 0.1234567890);
0.123457
printf("%.6f\n", 0.001234567890);
0.001235
printf("%#.6f\n", 0.001234567890);
0.001235
printf("%.6f\n", 0.001234567890);
0.000012
printf("%#.6f\n", 0.001234567890);
0.000012