Java中Double、Float类型的NaN和Infinity

22 篇文章 1 订阅


前言

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。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_lrs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值