学过 JavaScript 的应该都知道,在 js 中的数值型 number 类型中有几个特殊的数,一个正无穷大、一个负无穷大、一个不是一个数 NaN。

后来无意中发现 java 中也有这三个数,不过这三个数是浮点数,不是整数。只有在浮点数中这这三个数才成立。看图分析:

正无穷 Infinity

image

负无穷 -Infinity

image

不是一个数 NaN

image

无穷乘以 0,结果为 NaN。

System.out.println(Float.POSITIVE_INFINITY * 0); // NaN
System.out.println(Float.NEGATIVE_INFINITY * 0); // NaN

无穷除以 0,结果还是无穷。

System.out.println(Float.POSITIVE_INFINITY / 0); // Infinity
System.out.println(Float.NEGATIVE_INFINITY / 0); // -Infinity

无穷做任何运算(除了乘以 0),结果还是无穷。

System.out.println(Float.POSITIVE_INFINITY + 10000); // Infinity
System.out.println(Float.POSITIVE_INFINITY - 10000); // Infinity
System.out.println(Float.POSITIVE_INFINITY * 10000); // Infinity
System.out.println(Float.POSITIVE_INFINITY / 10000); // Infinity

System.out.println(Float.NEGATIVE_INFINITY + 10000); // -Infinity
System.out.println(Float.NEGATIVE_INFINITY - 10000); // -Infinity
System.out.println(Float.NEGATIVE_INFINITY * 10000); // -Infinity
System.out.println(Float.NEGATIVE_INFINITY / 10000); // -Infinity

判断一个浮点数是否为无穷,可用 isInfinite() 方法。

System.out.println(Float.isInfinite(Float.POSITIVE_INFINITY)); // true
System.out.println(Float.isInfinite(Float.NEGATIVE_INFINITY)); // true

判断一个浮点数是否为 NaN,可用 isNaN() 方法。

System.out.println(Float.isNaN(Float.NaN)); // true
System.out.println(Double.isNaN(Double.NaN)); // true

NaN 表示非数字,它与任何值都不相等,甚至不等于它自己。

System.out.println(Float.NaN == Float.NaN); // false
System.out.println(Double.NaN == Double.NaN); // false

参考资料:

https://www.cnblogs.com/zhizhixiaoxia/p/10756317.html

https://www.cnblogs.com/zhisuoyu/archive/2016/03/24/5314541.html

原文链接:https://miansen.wang/2020/04/27/1/