在 Java 计算中,肯定会使用各种基本数据类型,进行加减乘除等操作。但是假如哪一天,你发现一个函数给你返回了一个float结果,你打印出来后却发现不是小数,而是Infinity或NaN这种东西,你可能就一脸黑人问号了。

这两个值确实是 Java 提供的数值,一个返回float的函数给你返回这两个值也是没有任何问题的。那这两个值各代表什么意义呢,下面给出答案:

无穷大 Infinity

在Float类中,有两个静态常量:

public static final float POSITIVE_INFINITY = 1.0f / 0.0f;

public static final float NEGATIVE_INFINITY = -1.0f / 0.0f;

这两个常量一个表示正无穷,一个表示负无穷。在计算上,有一点一定要特别注意:

无穷大加上一个数还是无穷大。

double infinity = 1.0 / 0;

System.out.println(infinity); //Infinity

System.out.println(infinity + 1); //Infinity

System.out.println(infinity == i + 1); //true

如果你要初始化一个数为无穷大,那么可以用任何被计算为无穷大的浮点算术表达式来初始化,或者使用Float提供的常量:

float infinity = 1.0 / 0.0;

float infinity = Float.POSITIVE_INFINITY;

不是数字的数 NaN

NaN,not a number,对于所有没有良好的数字定义的浮点计算,如0.0/0.0,结果都是NaN。在Float类中,提供了一个常量来表示NaN:

public static final float NaN = 0.0f / 0.0f;

初始化一个数字为NaN,可以像Float一样用任何计算结果为NaN 的浮点算术表达式或直接用Float提供的这个常量:

float nan= 0.0 / 0.0;

float nan = Float.NaN ;

NaN 有一些奇葩的性质,在计算时需要特别注意:

NaN 不等于任何浮点数值,包括它自身在内;即它与任何数比较均返回false。

任何浮点操作,只要它的一个或多个操作数为NaN,那么其结果为NaN。

虽然NaN与任何数比较均返回false,但是使用Float.compare()这个方法来比较两个NaN时,却会得到相等的结果。如下:

float nan = 0.0 / 0;

System.out.println(nan); //NaN

System.out.println(nan + 1); //NaN

System.out.println(nan == nan + 1); //false

float anan = 0.0 / 0;

System.out.println(Float.compare(nan,anan)); //true

Float 中的其他常量:

上面介绍了Float类中的3个常量,这3个是需要特别注意的,其他Float还有其他的常量,只是不常用而已。下面就对Float中的常量做一下总结:

float POSITIVE_INFINITY = 1.0f / 0.0f;正无穷大

float NEGATIVE_INFINITY = -1.0f / 0.0f;负无穷大

float NaN = 0.0f / 0.0f;表示不是一个数字

float MAX_VALUE = 0x1.fffffeP+127f; float能表示的最大正值:3.4028235e+38f

float MIN_NORMAL = 0x1.0p-126f; 1.17549435E-38f

float MIN_VALUE = 0x0.000002P-126f; float能表示的最小正值 1.4e-45f

final int MAX_EXPONENT = 127; 一个有限float数值的最大指数值

final int MIN_EXPONENT = -126; 一个有限float数值的最小指数值

final int SIZE = 32; 一个float类型数值占用的比特数

final int BYTES = SIZE / Byte.SIZE; 一个float类型数值占用的字节数

另外,在 Java 提供的另一个浮点类Double类中,也存在相同意义的常量,只是值不同而已。

java nan 和 infinity,Float中的那些常量 Infinity、NaN相关推荐

  1. c语言中出现nan错误,c语言中浮点运算的inf和nan错误

    ============================================ 作者:yuanlulu http://blog.csdn.net/yuanlulu 版权没有,但是转载请保留此 ...

  2. -infinity java_java中的NAN和INFINITY

    java浮点数运算中有两个特殊的情况:NAN.INFINITY. 1.INFINITY: 在浮点数运算时,有时我们会遇到除数为0的情况,那java是如何解决的呢? 我们知道,在整型运算中,除数是不能为 ...

  3. 用Java向SQL Server数据库中插入float数据报错An error occurred while converting the Float value to JDBC data type

    作者:翁松秀 用Java向SQL Server数据库中插入float数据报错 用Java向SQL Server数据库中插入float数据报错 报错信息: 报错原因: 解决方案: 报错信息: An er ...

  4. java怎么表示正无穷大_java中怎样表示一个无穷大? 无穷小?

    Java中提供了三个特殊的浮点数值:正无穷大.负无穷大.非数,用于表示溢出和出错. 正无穷大:用一个正数除以0将得到一个正无穷大,通过Double或Float的POSITIVE_INFINITY表示. ...

  5. java怎么表示正无穷大_java中怎样表示一个无穷大?无穷小

    展开全部 Java中提供了三个特殊636f70793231313335323631343130323136353331333361323638的浮点数值:正无穷大.负无穷大.非数,用于表示溢出和出错. ...

  6. java double 取余_java中double除法和取余的若干注意

    1 整数除法中,除数为0,抛出一个算术异常ArithmeticException.整数取余运算中,除数为0,抛出一个ArithmeticException异常. 如: class Test { pub ...

  7. 如何检查JavaScript中的数字是否为NaN?

    我只是在Firefox的JavaScript控制台中尝试过,但是以下任何一条都不返回true: parseFloat('geoff') == NaN;parseFloat('geoff') == Nu ...

  8. java中有没有栈_Java中堆和栈有什么区别

    stack 和 heep 都是内存的一部分stack 空间小,速度比较快, 用来放对象的引用heep 大,一般所有创建的对象都放在这里.栈(stack):是一个先进后出的数据结构,通常用于保存方法(函 ...

  9. 机器学习中如何处理缺失数据(NAN和Ifo)?

    机器学习中如何处理缺失数据(NAN)? 文章目录: 一.NAN 和 Inf 二.机器学习中空值的处理方法 一.NAN 和 Inf NAN(Not A number):意思:不是一个数字,是一个空值 I ...

最新文章

  1. node.js——麻将算法(一)基本判胡
  2. matlab根轨迹法串联超前校正,4.7基于根轨迹法的串联超前校正.ppt
  3. 没想到咱也算得上是先富起来的那一拨
  4. python如何生成列表和元组数据_Python数据类型(列表和元组)
  5. AliOS Things全链路优化-CoAP FOTA
  6. pageResponse - 让H5适配移动设备全家(移动端适配)
  7. 绿盟漏洞扫描_二十周年专题|绿盟极光,用专注惊艳了时光
  8. 47不用加减乘除做加法
  9. Transparent 之 TransparentBlt
  10. int 转string
  11. miniMobile(手机)
  12. java命令行导出、导入sql文件
  13. JavaWeb如何学?
  14. bjui—关闭dialog以及当前标签
  15. 【备忘】【No5】微信公众平台开发入门到实战开发视频教程(Java+PHP)
  16. gitlab 配置QQ邮箱
  17. 计算机管理打印机服务,win7系统打印机服务怎样开启 开启打印机服务的设置方法...
  18. IE与非IE浏览器调用PC摄像头拍摄并且上传
  19. 关于cloudreve在线播放视频没有声音的问题
  20. IOS APP 制作二维码 下载

热门文章

  1. 循环神经网络 简易使用
  2. Oracle知识点笔记
  3. 新浪微博iOS版SDK“宝玉XP”框…
  4. MP service层CRUD
  5. 中美创新与信用峰会:凤凰金融总裁演讲
  6. iphone如何防root,iphone如何防止骚扰电话
  7. python编译器MuEditor下载地址
  8. Pytorch基础知识(9)单目标分割
  9. 什么是Java虚拟机?为什么Java被称为平台无关的编程语言
  10. mysql查询每天在17-18点间的数据_[东北师范大学]《数据库系统》18秋在线作业1(100分)...