下面的程序正在打印 123828749, 0.000000 但我预计是 123828749, 123828749.0。它从哪里得到 0.000000 ?
#include <stdio.h>
void main()
{
double x = 123828749.66;
int y = x;
printf("%d\n", y);
printf("%lf\n", y);
}
谢谢
在对您的第二次调用printf
中传递一个int
,但格式字符串是%lf
它期望传递一个浮点值。这会调用未定义的行为。
如果您想在将y
其传递给 时将其视为浮点值,则printf
需要显式转换:
printf("%lf\n", (double)y);
为了更准确地回答您的问题(即使大卫的回答是完全准确的),当(在运行时)格式字符串被printf
函数解析时,它需要double
格式。但是,您提供的int
and sinceint
很可能与double
您的程序读取一些垃圾内存并打印出这个意外结果的大小不同(但没有迹象表明是这种情况)。这就是零的来源。