你说的是哪个“强制转型”? 从你发的另一个问题看,你可能对这些概念有些混乱,我一行行解释吧:double num = 2.5;这句代码是定义了一个 double 类型变量 num,并且赋予初值 2.5int Num = (int)num;这句是定义了 int 类型变量 Num,并以 num 初始化。这里等号右侧是 double 类型,左侧是 int 类型,并不相符。这样等号右侧的 double 类型值会隐式转型为左侧的 int 类型,这个转型后的值会被作为初值赋予 Num。所以这里本来就会发生隐式转型,那个“强制转型 (int)”是没有必要的,可以去掉。还有一点要注意:我写的是“...右侧的 double 类型值会隐式转型...”。隐式转型并不会改变 num 的类型,num 的类型永远是声明时的那个(也就是 double)。隐式转型只是把 num 这个变量的值(浮点值 2.5)转为整形值 2我不知道你问的“有效条件”是什么意思。你的理解可能有误,Num 不是临时的!Num就是个正常的 int 类型变量。只是在初始化 Num 时、在确定初值的过程中,等号右侧的 num 的值发生了一次隐式转型而已(再强调一下,这对 num 不会有任何影响)printf("...%d\n", Num);printf 打印变量的值需要搭配相应的“格式化指示符”。Num 是 int 型,对应的格式化指示符是 %d,所以这句代码没有问题,打印出了 2printf("...%f\n", Num);那么这句就有问题了!Num 是 int 型,不应该用 %f,所以输出的内容不正确。至于那个 #QNANO,它是提示“不是合法的浮点值”,这是当然的,因为 Num 根本就不是浮点类型。其实你不用管这个,你只要知道你用了不正确的格式化指示符,printf 就不能打印出正确的内容,打出什么奇怪的东西都有可能。