我正在解决一个困扰我一段时间的问题。还是不明白。更改m
的类型很有意义,但是我仍然不明白m
在此过程中经历了什么。它的价值如何变化?
下面是代码。
我已经在代码块上尝试过了。
#include<stdio.h>
int main()
{
int m=5;
m = (float)m / (2.0);//There, shouldn't m be 2.500000?
printf("%f\n", m);
printf("%0.2f\n",(float)m/2.0);
getchar();
return 0;
}
预期结果:
2.500000 1.25
实际结果:
nan 1.00
答案 0 :(得分:5)
m
是int
。因此,如果您执行m = (float)m / (2.0);
,那么即使(float)m / (2.0)
是2.5
,它也会被截断以m
的形式存储在2
中。所以当你这样做
printf("%f\n", m);
您的行为不确定,因为它是int
,并且您说它是float
。
稍后您这样做
printf("%0.2f\n",(float)m/2.0);
,您将得到1.0
,因为m
为2
,然后将其除以2.0
。您可以通过将m
的类型改为float
来获得预期的输出。
答案 1 :(得分:1)
printf("%f\n", m); // m is int
不。 "%f"
与int
不匹配。
使用"%d"
或转换值
printf("%d\n", m);
printf("%f\n", (double)m);
请注意,转换为float
会强制第二次自动转换为double
printf("%f\n", (float)m); // convert twice