Java中Double、Float類型的NaN和Infinity的具體使用
前言
Java在處理浮點(diǎn)數(shù)運(yùn)算時(shí),提供了NaN和Infinity兩個(gè)常量
一、NaN
(1)、NaN的定義:
public static final double NaN = 0.0d / 0.0; public static final float NaN = 0.0f / 0.0f;
(2)、NaN的測(cè)試
double類型測(cè)試:
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和任何值都不相等,可以通過(guò)Double.isNaN(a)的方式來(lái)判斷是不是NaN,該方法實(shí)現(xiàn)也是通過(guò)v != v來(lái)判斷的。
包裝類Double類型測(cè)試:
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通過(guò)"=="比較和自己是相等的,和其他NaN不相等;
通過(guò)"equals"比較是,和自己相等,和其他NaN也相等。
NaN值的類型強(qiáng)轉(zhuǎn)測(cè)試:
double a = 0.0d / 0.0; //NaN long b = (long) a; //0 int c = (int) a; //0 float d = (float) a; //NaN
可以看出將NaN強(qiáng)轉(zhuǎn)為int或long時(shí),值變?yōu)榱?;強(qiáng)轉(zhuǎn)為float時(shí),值仍為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 分別代表正無(wú)窮、負(fù)無(wú)窮
(2)、Infinity的測(cè)試
double類型的測(cè)試
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類型測(cè)試:
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,通過(guò)"=="比較和自己是相等的,和其他包裝類型的Infinity不相等,但是和其他基本類型的Infinity是相等的;
通過(guò)"equals"比較是,和自己相等,和其他Infinity也相等。
到此這篇關(guān)于Java中Double、Float類型的NaN和Infinity的具體使用的文章就介紹到這了,更多相關(guān)Java NaN Infinity內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot+BootStrap多文件上傳到本地實(shí)例
這篇文章主要介紹了SpringBoot+BootStrap多文件上傳到本地實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03mybatis整合spring實(shí)現(xiàn)開(kāi)啟mapper.xml映射文件掃描
這篇文章主要介紹了mybatis整合spring實(shí)現(xiàn)開(kāi)啟mapper.xml映射文件掃描,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10詳解 Java HashMap 實(shí)現(xiàn)原理
這篇文章主要介紹了詳解 Java HashMap 實(shí)現(xiàn)原理的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下2021-03-03eclipse配置tomcat10的詳細(xì)步驟總結(jié)
今天給大家?guī)?lái)的是關(guān)于Java的相關(guān)知識(shí),文章圍繞著eclipse配置tomcat10的詳細(xì)步驟展開(kāi),文中有非常詳細(xì)的介紹及圖文示例,需要的朋友可以參考下2021-06-06