关于强制数据类型转换问题!

来源:百度知道 编辑:UC知道 时间:2024/07/02 07:44:47
1.
#include<stdio.h>
void main()
{
float x=123.4567;
printf("%f\n",(int)(x*100+0.5)/100.0);
}
答案为什么是:123.460000。
如果把程序稍微改动一下,改为:printf("%f\n",(int)((x*100+0.5)/100.0)); 而此时结果就变成了0.000000.

2.
#include<stdio.h>
int fun1(double a)
{
return a*=a;
}
int fun2(double x,double y)
{
double a=0,b=0;
a=fun1(x);
b=fun1(y);
return (int)(a+b);
}
void main()
{
double w;
w=fun2(1.1,2.0);
printf("%lf",w);
printf("\n");
}
//输出结果:5.000000.
但如果我把 printf("%lf",w); 改为:printf("%d",w); 其结果为0.
运行的环境是vc++6.0.

请帮忙解释一下其中的原因.
强制数据类型转换问题的关键是什么?或者哪个知识点是核心的,这样我解决了一个这样的问题,那么下次我再碰到其他的就可以迎刃而解.

如果赋值语句两边的类型不同就需要强制类型转换,不然系统会自动类型转换到要赋值的数据类型(如果可行的话)。
float x=123.4567;
printf("%f\n",(int)(x*100+0.5)/100.0);
x*100+0.5=12346.17,强制转换成int,为12346
再除以100.0,注意不是100,这意味着再强制转换成float,结果就是123.46

(int)((x*100+0.5)/100.0)) 而这个先计算(x*100+0.5)/100.0=123.4617,然后强制转换成int,变成123,注意printf是用%f输出的,所以是0

printf类型不符的话,输出大多数都是0