经常在程序碰到float跟double类型的变量显示为nan,这个是啥意思呢?经过查阅得知,nan是float或double的一个成员常量,这用来描述一个非法的float或double,Not a Number,表示其实不是一个合理的实数,在合法但不合理的情况下,避免你的程序出现exception,而且nan什么都不是,不能比较,(nan = nan)= false,也可以表示为无穷大或无穷小,或表示不定量的数。
下面转贴一篇文章,原文地址:http://blog.163.com/itworker@126/blog/static/1339832200972762955433/
在JDK的Float与Double中有一个很特别的方法isNaN,细心查看JDK源码可以看到NaN只是Float或Double的一个属性,用于描述非法的float,在经过多次运算后Float或Double可能会出现非法的情况,如0.0/0.0。
public boolean isNaN(float v) {
return (v != v);
}
当v为float时比较的是值,这个是毫无疑问的。可什么情况下会出现假呢?这或许与SUN的设计有关
做以下测试:
System.out.println(Float.NaN==Float.NaN);
结果:false
可以得出结论:
1、在Float中NaN实际上是引用类型,而不是值类型的。
2、每一个NaN都是不同的对象。
http://blog.sina.com.cn/s/blog_79c5bdc30100tozj.html