C 从格式说明符';%开始g';对于双开始指数格式打印
我想了解double的格式说明符C 从格式说明符';%开始g';对于双开始指数格式打印,c,printf,C,Printf,我想了解double的格式说明符%g何时开始以指数格式打印值 myTest.c #include <stdio.h> int main() { double val = 384615.38462; double val2 = 9999999; printf ("val = %g\n",val); printf ("val2 = %g\n",val2); return 0; } 输出: val = 384615 val2 = 1e+07 问题: 为什么val
%g
何时开始以指数格式打印值
myTest.c
#include <stdio.h>
int main() {
double val = 384615.38462;
double val2 = 9999999;
printf ("val = %g\n",val);
printf ("val2 = %g\n",val2);
return 0;
}
输出:
val = 384615
val2 = 1e+07
问题:
为什么val
被打印为整数,为什么val2
被转换为指数格式,即使我没有在printf
中使用%lf
是否存在从何时开始使用指数格式打印值的范围?如果是的话,我们有没有办法猜测数值范围
提前感谢。根据
man 3 printf
:
g、 g
双参数转换为f或e样式(或f或e表示G转换)。精度指定有效位数。如果缺少精度,则给出6位数字;如果精度为零,则将其视为1<如果转换后的指数小于-4或大于或等于精度,则使用strong>样式e。从结果的小数部分删除尾随零;小数点后至少有一位数字时才会出现
以及C11–ISO/IEC 9899:2011标准草案N1570():
g、 g
表示浮点数的双参数在中转换
样式f或e(或在G转换说明符的情况下为样式f或e),
取决于转换的值和精度。让P等于
如果精度不为零,则精度为6;如果精度为零,则精度为1。
然后,如果样式为E的转换的指数为X:
-如果p>X≥ −4、转换方式为f(或f)和精度
P− (X+1)。
-否则,将使用样式e(或e)和精度p进行转换− 一,
最后,除非使用#标志,否则将从
如果出现以下情况,则删除结果的小数部分和小数点字符
没有剩余的部分了。
表示无穷大或NaN的双参数在样式中转换
f或f转换说明符的
警察说
g,g
双参数转换为f或e样式(或f或e表示G转换)。精度指定有效位数。如果缺少精度,则给出6位数字;如果精度为零,则将其视为1<如果转换后的指数小于-4或大于或等于精度,则使用strong>样式e。从结果的小数部分删除尾随零;小数点后至少有一位数字时才会出现
那么,DV:你能给我点击率吗。。。?
val = 384615
val2 = 1e+07