黑马程序员技术交流社区

标题: 数据比较的一点不解 [打印本页]

作者: 于洋洋    时间: 2011-8-1 10:11
标题: 数据比较的一点不解
  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,有点不解,这究竟是为什么?
作者: 李龙    时间: 2011-8-1 12:10
如果你
  1. System.out.println(i);
复制代码
会发现输出结果为NaN
这是java一种特殊的浮点类型的数值,是一个不确定数,用于处理java编译时出现的错误情况的
NaN 是不与任何值相等的,包括其本身。
[ 本帖最后由 李龙 于 2011-08-01  12:13 编辑 ]
作者: 匿名    时间: 2011-8-1 12:28
除数是不能为0的,再有计算机表示浮点数精度有限,比较浮点数只能是近似等于。可以这样判断一个浮点变量是否为零:
const  float  EPSILON = 0.000001;//根据需要调整精度
float  x;

if((x >= -EPSILON) && (x <= EPSILON)) {//x为零
}
else{
}
作者: 匿名    时间: 2011-8-1 19:19
浮点型的0.0并不是0,是一个无穷小量,所以0.0/0.0并不会报被0除异常,就像李龙说的结果是一个不确定的数




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2