日期:2014-05-20  浏览次数:20628 次

一道面试题(java)
float   a   =   3f;
for(int   i=0;i <200;i++)
        a-=0.01;
a   =   (int)a;
System.out.println(a);//结果是什么,说明原因.

------解决方案--------------------
结果肯定是1。0,过程中出现的00001,我的理解是计算机的二进制与我们用的10进制转换问题。(个人理解)
就像DOUBLE的0。0无限接近于0一样
------解决方案--------------------
楼主你是不是搞错了啊
怎么会输出那么多次啊

a = (int)a;
其中(int)a ==1 是可以确定了
为什么输出是1.0呢,是因为a是float型的
这句的效果就是 float a =1 一样
------解决方案--------------------
a = (int)a;

这里我也有点不明白,为什么

经过 (int) 转换了 还是 1.0 呢,还会有小数位呢?
------解决方案--------------------
我也觉得应该是1
------解决方案--------------------
1.0,(int)a的确为1,可是a是float类型的啊,就相当于float a=1一样,那a就是1.0了.
------解决方案--------------------
输出是1.0
虽然(int)a=1,但a仍然是float的啊!所以输出为1.0
人类使用的是十进制,所以你觉得a的结果为1.0,但计算机用的是二进制啊,结果a等于1.0000009,就好比你没法用十进制精确得表示1/3一样!

------解决方案--------------------
float a = 3f;
for(int i=0;i <200;i++)
a-=0.01;
a = (int)a;
System.out.println(a);//

为什么那么多人不理解结果是1.0呢??程序中的a是float类型,它是全局的,
a = (int)a;
实际上是:float a = (int)a;
等式右边强制类型转换(float--> int),所以结果是1,而等式左边,由于a是float类型,将int行赋值给float类型,就发生了自动类型(隐式类型转换)转换了(int--> float);所以结果是1.0;

至于在计算过程中为什么出现;

第 9 次=====2.9
第 10 次=====2.89
第 11 次=====2.88
第 12 次=====2.8700001
第 13 次=====2.8600001

我也同意是计算机进制之间转换的问题
------解决方案--------------------
float a = 3f;
for(int i=0;i <200;i++)
a-=0.01;
a = (int)a;
System.out.println(a);//

楼主题目都写错了。。

如果结果是你这样的话:
......
......
第 9 次=====2.9
第 10 次=====2.89
第 11 次=====2.88
第 12 次=====2.8700001
第 13 次=====2.8600001
.....

那么就要注释这一句 //a = (int)a;
结果是1.000019
应该是十进制和二进制转换之间出现的问题哦。。
------解决方案--------------------
1
------解决方案--------------------
楼主:最后你的变量a还是是Float啊
------解决方案--------------------
原因就是a是float的
------解决方案--------------------
float a;
......
(a = (ing)a;) 和(float a = (int)a)
------解决方案--------------------
应该是1.0吧,虽然没有运行测试过

因为3-1.99后取整数部分同时a又是float类型


------解决方案--------------------
呵呵,不好意思,问一下
-----------------------------
......
......
第 9 次=====2.9
第 10 次=====2.89
第 11 次=====2.88
第 12 次=====2.8700001
第 13 次=====2.8600001
------------------------------
是什么意思?
------解决方案--------------------
1
------解决方案--------------------
200的循环。。。。。
将结果float type casting int 再赋值给float type 。
结果是多少我就不想去计算了。。
------解决方案--------------------
很多人说是进制转换的问题,那到底为什么会产生这个问题呢?不太明白,讲的在细致些好吗??