Java中Double、Float類型的NaN和Infinity的具體使用
前言
Java在處理浮點數(shù)運算時,提供了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,該方法實現(xiàn)也是通過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值的類型強(qiáng)轉(zhuǎn)測試:
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時,值變?yōu)榱?;強(qiáng)轉(zhuǎn)為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 分別代表正無窮、負(fù)無窮
(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也相等。
到此這篇關(guān)于Java中Double、Float類型的NaN和Infinity的具體使用的文章就介紹到這了,更多相關(guān)Java NaN Infinity內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JAVA異常信息Exception?e及e的相關(guān)方法解讀
這篇文章主要介紹了JAVA異常信息Exception?e及e的相關(guān)方法解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06
如何修改json字符串中某個key對應(yīng)的value值
這篇文章主要介紹了如何修改json字符串中某個key對應(yīng)的value值操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11
Springboot實現(xiàn)人臉識別與WebSocket長連接的實現(xiàn)代碼
這篇文章主要介紹了Springboot實現(xiàn)人臉識別與WebSocket長連接的實現(xiàn),本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2023-11-11
RestClient?通過攔截器實現(xiàn)請求加密的示例
本文介紹了如何通過攔截器實現(xiàn)請求加密,并通過RestClient優(yōu)化了加密過程,傳統(tǒng)的加密方法依賴對象轉(zhuǎn)換和序列化處理,容易導(dǎo)致加密不一致或難以調(diào)試的問題,通過引入攔截器,可以直接操作請求體,避免了不必要的轉(zhuǎn)換步驟,確保加密過程與請求體完全一致,感興趣的朋友一起看看吧2025-02-02
Mybatis入門指南之實現(xiàn)對數(shù)據(jù)庫增刪改查
數(shù)據(jù)持久層主要負(fù)責(zé)數(shù)據(jù)的增、刪、改、查等功能,MyBatis 則是一款優(yōu)秀的持久層框架,下面這篇文章主要給大家介紹了關(guān)于Mybatis入門指南之實現(xiàn)對數(shù)據(jù)庫增刪改查的相關(guān)資料,需要的朋友可以參考下2022-10-10
Spring使用IOC與DI實現(xiàn)完全注解開發(fā)
IOC也是Spring的核心之一了,之前學(xué)的時候是采用xml配置文件的方式去實現(xiàn)的,后來其中也多少穿插了幾個注解,但是沒有說完全采用注解實現(xiàn)。那么這篇文章就和大家分享一下,全部采用注解來實現(xiàn)IOC + DI2022-09-09

