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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吕猛 黑马帝   /  2011-12-25 22:51  /  2360 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

不知道为什么,把double改成int之后,就会和毕老师课中的实例那样报错。如果改成double的话,就能通过编译,并能运算,运算结果为:Infiniy。
  1. class Shang
  2. {
  3.         public static double chu(double a,double b)
  4.         {
  5.                 double num = a/b;
  6.                 return num;
  7.         }
  8. }
  9. class  DemoException
  10. {
  11.         public static void main(String[] args)
  12.         {
  13.                 Shang s = new Shang();
  14.                 double x;
  15.                 try
  16.                 {
  17.                         x = s.chu(5,0);       
  18.                         System.out.println(x);
  19.                 }
  20.                 catch (Exception e)
  21.                 {
  22.                         System.out.println(e.getMessage());
  23.                         System.out.println(e.toString());
  24.                 }
  25.                 System.out.println("over!");
  26.         }
  27. }
复制代码


5 个回复

倒序浏览
李楠 黑马帝 2011-12-25 23:41:54
沙发
你的意思是哪里的double改成int?报什么错?
回复 使用道具 举报
将变量x定义为int,但chu()方法的返回值类型为double肯定会报错,损失精度了,除非你强转,   x = (int)s.chu(5,0);  ,这样也不会报错。
至于改为double后运行结果为Infiniy,无限,主要是因为双精度的时候0其实不是真正的零,是一个非常小近似o的数,跟int型的0不同,int型的是真正的零,而不是一个很小的近似为零的数。

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

回复 使用道具 举报
吕猛 黑马帝 2011-12-26 15:39:24
板凳
李楠 发表于 2011-12-25 23:41
你的意思是哪里的double改成int?报什么错?

不是,上面的代码直接运行,结果为Infiniy。而不是报错。
回复 使用道具 举报
吕猛 黑马帝 2011-12-26 15:40:03
报纸
yunqiangshan 发表于 2011-12-25 23:50
将变量x定义为int,但chu()方法的返回值类型为double肯定会报错,损失精度了,除非你强转,   x = (int) ...

报错是因为除数不能为0.
回复 使用道具 举报
京泰 发表于 2011-12-26 15:40
报错是因为除数不能为0.

我以为你说编译时出错呢,chu(double a,double b)中double改为int运行时
当然会报错了,除零肯定没有结果,当然要报错了,改为double的话,除的其实不是零,是一个近似于零的值,所以不报错,并且有结果。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马