介绍
在学习JavaScript时看到了Number类型中的NaN和Infinity,因为概念本身是通用的,所以趁机总结了一下Java中的NaN和Infinity。
基本
Java的Float型和Double型各有三个很特别的常量:NaN(非数),POSITIVE_INFINITY(正无穷),NEGATIVE_INFINITY(负无穷)
Float
1 | /** |
Double
1 | /** |
NaN
NaN是Not a Number
的缩写,表示未定义或者不可表示的值,NaN有一个特性,那就是它与任何数都不相等,包括它自己。判断一个数是不是NaN,只能使用Float或者Double的isNaN()
方法,那么这个方法是怎么判断的呢?我们看一看(查看的是Float版,Double除了参数类型都一样,下面二者没有区别的部分都直接使用Float的内容来说明):
1 | /** |
所以,跟自己不相等的数字,就是NaN.
计算中产生的NaN
什么时候会产生NaN呢?首先,任何与NaN进行的运算,其结果都是NaN.比如下面的运算,不要去想太多,结果就是NaN
1 | public class Test { |
其次,从数学角度讲,无法进行的运算(N/0
)或者会产生复数的运算(sqrt(-N)
),都会产生NaN。
(咕咕咕,后面的笔记被鸽了)