C 中的浮点数、双精度数和指数输出

Float, Double, and Exponential Output in C

这是我的代码:

void main()
{
    printf("%s\n", "Hello World!");
    printf("%c\n",'a');
    printf("%d\n", 'a');
    printf("%d\n",10);
    printf("%d\n", -10);
    printf("%lf\n", 3.14159265);
    printf("%d\n", 3.14159265);
    printf("%e\n", 314159265);
}

我的输出是这样的:

Hello World!
a
97
10
-10
3.141593
1405670641
1.552153e-315

我的问题有三个:

如果 double 有 16 位,为什么输出显示 7 位有效数字?

为什么指数显示的数字完全不同,可能是垃圾值?

此外,当我将代码更改为:printf("%lf\n", 3);。它将输出显示为 0.000000。为什么会这样?

    printf("%d\n", 3.14159265);  // a)
    printf("%e\n", 314159265);   // b)

a) 转换说明符 "%d" 需要一个 int 值;值 3.14159265 的类型为 double。尝试 printf("%f", 3.14159265);printf("%d", 3);

b) 转换说明符 "%e" 需要一个 double 值;值 314159265 的类型为 int。尝试 printf("%d", 314159265);printf("%f", 3.1415926);

转换说明符与关联值不匹配会调用未定义的行为。


要打印特定的小数位数,请使用 "%.nf" 说明符

printf("%.3f", 3.14159265);
printf("%.6f", 3.14159265);
printf("%.9f", 3.14159265);

printf() 说明符 "%lf""%f" 完全相同(它们与 scanf() 不同)