今天在对elasticsearch聚合查询获取Double值时,忽然发现最大、最小、平均值分别为:
Double.POSITIVE_INFINITY、Double.NEGATIVE_INFINITY、Double.NAN
查询了Double的源码定义,其中:
Double:
public static final double POSITIVE_INFINITY = 1.0 / 0.0; //正无穷大
public static final double NEGATIVE_INFINITY = -1.0 / 0.0; // 负无穷大
public static final double NaN = 0.0d / 0.0; //非数字
而且Float类里也同样定义了这三个常量。
java中整数类型的相除,除数不能为0。
例如 5/0,在运行的时候会报错。
但是浮点型类型的相除,除数可以为0。
例如5.0/0,在运行的时候正常,结果为Infinity。
例如-5.0/0,在运行的时候正常,结果为-Infinity。
判断一个Double类型的值是否为NAN,需要用方法:isNAN();
判断一个Double类型的值是否为POSITIVE_INFINITY或者NEGATIVE_INFINITY或者,需要用方法:isInfinite()
Double.POSITIVE_INFINITY == Double.POSITIVE_INFINITY --> true
Double.NEGATIVE_INFINITY == Double.NEGATIVE_INFINITY --> true
Double.NAN == Double.NAN --> false 注意:NAN不等于自身
还有以下3点需要注意:
1. 无限乘以0,结果为NAN
Double.POSITIVE_INFINITY * 0; --> NAN Double.NEGATIVE_INFINITY * 0; --> NAN
2.无限除以0,结果不变,还是无限
(Double.POSITIVE_INFINITY / 0) == Double.POSITIVE_INFINITY; --> true (Double.NEGATIVE_INFINITY / 0) == Double.NEGATIVE_INFINITY; --> true
3.无限做除了乘以0意外的运算,结果还是无限
Double.POSITIVE_INFINITY == (Double.POSITIVE_INFINITY + 600); --> true Double.POSITIVE_INFINITY == (Double.POSITIVE_INFINITY - 600); --> true Double.POSITIVE_INFINITY == (Double.POSITIVE_INFINITY * 600); --> true Double.POSITIVE_INFINITY == (Double.POSITIVE_INFINITY / 600); --> true
Float里这三个常量也同理。