A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨文宇 中级黑马   /  2012-7-23 14:33  /  1875 人查看  /  5 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨文宇 于 2012-7-23 15:05 编辑

class Demo4 {
   public static void main(String[] args) {
        System.out.println( 12/0  );// 运行时异常java.lang.ArithmeticException
                System.out.println( 12.0 / 0 ); // [ Infinity ]
                 //为什么这两个运行的结果不一样?

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
Infinity是无穷大的意思。
12/0是被当做了两个int类型的整除,所以会抛异常。
而12.0/0是被当做了两个小数,而且0不是我们看到的0,而是无穷小的数,所以第二个结果是无穷大的数,无法输出出来。

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
李东升 发表于 2012-7-23 14:43
Infinity是无穷大的意思。
12/0是被当做了两个int类型的整除,所以会抛异常。
而12.0/0是被当做了两个小数 ...

理解:handshake
回复 使用道具 举报
其实你的问题很不简单的,
原因是整数和浮点数在计算机中的表现形式有很大差别,
对于int类型来说普通计算机上都是用32为二进制来表示的,超过了这个最大值就会抛出异常,因为计算机无法表示
对于浮点型(double,float)在计算机中是使用IEEE754工业标准表示的(计算机系统结构这门课有讲到),他表示的范围很大,但是为了在出现错误条件(譬如算术溢出,给负数开平方根,除以 0 等)时,可以用浮点值集合中的数字来表示所产生的结果,于是就使用了特殊值表示,例如Infinite。
参考资料:http://blog.csdn.net/woshirongshaolin/article/details/7775499

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
rslheima 发表于 2012-7-23 15:33
其实你的问题很不简单的,
原因是整数和浮点数在计算机中的表现形式有很大差别,
对于int类型来说普通计算 ...

谢谢,那个资料我看得头晕,先收下了
回复 使用道具 举报
本帖最后由 郭凯敏 于 2012-7-23 15:49 编辑

请问沙发的回答正确吗?如果是正确的,我也记下,这个问题我一直没想过.....请懂得同学确认下
哦哦,我也理解了:
1f/0f结果为正无穷大
1f/-0f结果为负无穷大
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马