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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 于洋洋 黑马帝   /  2011-8-1 10:11  /  1853 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. double i=0.0/0.0;
  2. if(i==i){
  3.      System.out.println(true);
  4. }
  5. else{
  6.      System.out.println(false);
  7. }
复制代码
结果竟然是false,有点不解,这究竟是为什么?

评分

参与人数 1技术分 +1 收起 理由
小龙 + 1

查看全部评分

3 个回复

倒序浏览
如果你
  1. System.out.println(i);
复制代码
会发现输出结果为NaN
这是java一种特殊的浮点类型的数值,是一个不确定数,用于处理java编译时出现的错误情况的
NaN 是不与任何值相等的,包括其本身。
[ 本帖最后由 李龙 于 2011-08-01  12:13 编辑 ]

评分

参与人数 1技术分 +1 收起 理由
小龙 + 1 6

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-8-1 12:28:24
藤椅
除数是不能为0的,再有计算机表示浮点数精度有限,比较浮点数只能是近似等于。可以这样判断一个浮点变量是否为零:
const  float  EPSILON = 0.000001;//根据需要调整精度
float  x;

if((x >= -EPSILON) && (x <= EPSILON)) {//x为零
}
else{
}

评分

参与人数 1技术分 +1 收起 理由
小龙 + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-8-1 19:19:43
板凳
浮点型的0.0并不是0,是一个无穷小量,所以0.0/0.0并不会报被0除异常,就像李龙说的结果是一个不确定的数
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马