Java中Double、Float类型的NaN和Infinity的具体使用
前言
Java在处理浮点数运算时,提供了NaN和Infinity两个常量
一、NaN
(1)、NaN的定义:
public static final double NaN = 0.0d / 0.0; public static final float NaN = 0.0f / 0.0f;
(2)、NaN的测试
double类型测试:
double a = 0.0d / 0.0; //NaN double b = 0.0d / 0.0; //NaN System.out.println(a != a); //true System.out.println(a != b); //true System.out.println(Double.isNaN(a)); //true
基本类型:NaN和自己是不相等的,NaN和任何值都不相等,可以通过Double.isNaN(a)的方式来判断是不是NaN,该方法实现也是通过v != v来判断的。
包装类Double类型测试:
double b = 0.0d / 0.0; //NaN Double c = 0.0d / 0.0; //NaN Double d = 0.0d / 0.0; //NaN System.out.println(Double.isNaN(c)); //true System.out.println(Double.isNaN(d)); //true System.out.println(c == c); //true System.out.println(c == d); //false System.out.println(c == b); //false System.out.println(c.equals(c)); //true System.out.println(c.equals(d)); //true System.out.println(c.equals(b)); //true
可以看出,包装类型Double通过"=="比较和自己是相等的,和其他NaN不相等;
通过"equals"比较是,和自己相等,和其他NaN也相等。
NaN值的类型强转测试:
double a = 0.0d / 0.0; //NaN long b = (long) a; //0 int c = (int) a; //0 float d = (float) a; //NaN
可以看出将NaN强转为int或long时,值变为了0;强转为float时,值仍为NaN。
二、Infinity
(1)、Infinity的定义
public static final double POSITIVE_INFINITY = 1.0 / 0.0; public static final double NEGATIVE_INFINITY = -1.0 / 0.0; public static final float POSITIVE_INFINITY = 1.0f / 0.0f; public static final float NEGATIVE_INFINITY = -1.0f / 0.0f;
POSITIVE_INFINITY 和NEGATIVE_INFINITY 分别代表正无穷、负无穷
(2)、Infinity的测试
double类型的测试
double a = 1.0 / 0.0; //Infinity double b = 1.0 / 0.0; //Infinity System.out.println(Double.isInfinite(a)); //true System.out.println(a == a); //true System.out.println(a == b); //true
基本类型的double,Infinity和自己相等,和其他的Infinity也相等。
包装类Double类型测试:
double b = 1.0 / 0.0; //Infinity Double c = 1.0 / 0.0; //Infinity Double d = 1.0 / 0.0; //Infinity System.out.println(Double.isInfinite(c)); //true System.out.println(c == c); //true System.out.println(c == d); //false System.out.println(c == b); //true System.out.println(c.equals(c)); //true System.out.println(c.equals(d)); //true System.out.println(c.equals(b)); //true
可以看出,包装类型Double的Infinity,通过"=="比较和自己是相等的,和其他包装类型的Infinity不相等,但是和其他基本类型的Infinity是相等的;
通过"equals"比较是,和自己相等,和其他Infinity也相等。
到此这篇关于Java中Double、Float类型的NaN和Infinity的具体使用的文章就介绍到这了,更多相关Java NaN Infinity内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
最新评论