Java中Double、Float类型的NaN和Infinity
目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?Java虚拟机在处理浮点数运算时,不会抛出任何运行时异常(这里所讲的是java语言中的异常,请勿
前言
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也相等。
总结
本文简单测试了浮点数的NaN和Infinity。
更多推荐
所有评论(0)