现象如图:
int main()
{
int m;
float n;
n=2.1;
m=n+0.9;
printf("%d\n",m);
printf("%.1f",n+0.9)
return 0;
}
//得到输出:2和3.0
//而预期结果是3,因为2.1+0.9=3.0嘛,int的类型转化只保留整数位得3嘛
//为什么会这样子?
//发现:运算中的“0.9”的类型是double,而n是float,会不会是运算时的类型转化导致的
//尝试如下:将n的类型由float变为double
int main()
{
int m;
doulbe n;
n=2.1;
m=n+0.9;
printf("%d\n",m);
printf("%.1f",n+0.9)
return 0;
}
//得到输出:3和3.0
//猜想有可能正确了!
//再次尝试如下:将“0.9”强行转换类型为float
int main()
{
int m;
doulbe n;
n=2.1;
m=n+(float)(0.9);
printf("%d\n",m);
printf("%.1f",n+0.9)
return 0;
}
//得到输出:3和3.0
//更肯定了猜想的合理性
//结论:利用强制转化来实现向上取整并不安全,该法使用时要小心!