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()
不同)
这是我的代码:
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()
不同)