1. 程式人生 > >[七]基礎數據類型之Float詳解

[七]基礎數據類型之Float詳解

true 返回 ont wid 標準化 sna font 分享 字符串

Float 基本數據類型float 的包裝類 Float 類型的對象包含一個 float 類型的字段 技術分享圖片

屬性簡介

用來以二進制補碼形式表示 float 值的比特位數 public static final int SIZE = 32;
二進制補碼形式表示 float 值的字節數 public static final int BYTES = SIZE / Byte.SIZE;
表示基本類型 float 的 Class 實例 public static final Class<Float> TYPE = (Class<Float>) Class.getPrimitiveClass("float");
能夠表示的最大值
只有標準化一種形式,也就是前文提到過的
技術分享圖片
public static final float MAX_VALUE = 0x1.fffffeP+127f;
標準化的最小值
技術分享圖片
public static final float MIN_NORMAL = 0x1.0p-126f;
最小值還有非標準化的形式
技術分享圖片
public static final float MIN_VALUE = 0x0.000002P-126f;
正無窮
它等於 Float.intBitsToFloat(0x7f800000) 返回的值
public static final float POSITIVE_INFINITY = 1.0f / 0.0f;
負無窮
它等於 Float.intBitsToFloat(0xff800000) 返回的值
public static final float NEGATIVE_INFINITY = -1.0f / 0.0f;
NaN
not a number
它等於 Float.intBitsToFloat(0x7fc00000) 返回的值
public static final float NaN = 0.0f / 0.0f;
指數真值的有效的最大值 public static final int MAX_EXPONENT = 127;
指數真值的有效的最小值 public static final int MIN_EXPONENT = -126;
這些屬性,看過上一篇浮點數簡介的話,可以很清晰的理解

構造方法

Float 依然提供了根據基本類型float以及float的String形式構造 String形式依然借助於parseXXX形式 parseFloat 另外,也提供了根據基本類型double進行構造的方式,內部直接強轉
Float(float value) 技術分享圖片
Float(String s) 技術分享圖片
Float(double value) 直接強轉
技術分享圖片

常用方法

對於浮點數,有一些額外的屬性方法 我們浮點數介紹中,對於浮點數的表示形式進行了介紹 技術分享圖片 Float提供了對於指定值的表示形式的獲取方法, 這表示形式也就是是一個32位的二進制位序列
Float 獲取表示形式
對於獲取表示形式 提供了兩種形式的方法,主要是針對於非數字的NaN的不同表示
他們可以與intBitsToFloat 可以進行互相轉換

floatToRawIntBits 如果參數為正無窮大,則結果為 0x7f800000 如果參數為負無窮大,則結果為 0xff800000 如果參數為 NaN,則結果是表示實際 NaN 值的整數 與 floatToIntBits 方法不同,floatToRawIntBits 不壓縮所有將 NaN 編碼為一個“規範”NaN 值的位模式。 在所有情況下,結果都是一個整數,將其賦予 intBitsToFloat(int) 方法將生成一個與 floatToRawIntBits 的參數相同的浮點值 本地方法 技術分享圖片
floatToIntBits 如果參數為正無窮大,則結果為 0x7f800000 如果參數為負無窮大,則結果為 0xff800000 如果參數為 NaN,則結果為 0x7fc00000 在所有情況下,結果都是一個整數 將其賦予 intBitsToFloat(int) 方法將生成一個浮點值,該浮點值與 floatToIntBits 的參數相同 (而所有 NaN 值則會生成一個“規範”NaN 值) 依賴floatToRawIntBits 技術分享圖片
將表示形式轉換為Float,返回對應於給定位表示形式的 float 值
本地方法
其實就是按照布局計算float
技術分享圖片

如果參數為 0x7f800000,則結果為正無窮大 如果參數為 0xff800000,則結果為負無窮大 如果參數值在 0x7f800001 到 0x7fffffff 或在 0xff800001 到 0xffffffff 之間,則結果為 NaN Java 提供的任何 IEEE 754 浮點操作都不能區分具有不同位模式的兩個同類型 NaN 值 不同的 NaN 值只能使用 Float.floatToRawIntBits 方法區分
浮點數有幾種特殊的表示,比如 無窮 NaN等 額外的,也提供了一些相關的方法
static boolean isNaN(float v) 靜態方法
是否一個非數字 (NaN) 值
非數值 true
技術分享圖片
static boolean isFinite(float f) 靜態方法
是否是有限的浮點數
有限的true
技術分享圖片
static boolean isInfinite(float v) 靜態方法
是否是無窮大
是無窮大 true
技術分享圖片
boolean isInfinite() 實例方法
依賴靜態方法
技術分享圖片
boolean isNaN() 實例方法 依賴靜態方法 技術分享圖片

比較

static int compare(float f1, float f2) 靜態方法
比較兩個float
f1 < f2 小於0
f1 = f2 等於0
f1 > f2 大於0
int compareTo(Float anotherFloat) 實例方法
兩個對象進行大小比較,依賴於靜態方法
技術分享圖片

parseXXX系列

字符串解析 為 基本類型, 不需要對象,所以都是靜態方法 技術分享圖片
返回一個字符串形式表示的基本類型float
表現效果同valueOf(String),不過valueOf 返回的是對象
如果String是null或者不包含可以解析的字符串將會拋出異常
底層依賴sun.misc.FloatingDecimal
技術分享圖片

valueOf系列

把基本基本類型 包裝為對象 用來創建獲得對象,所以無需對象,全都是靜態方法 技術分享圖片 不同於之前介紹的整數 數值,他們都有緩沖 float不存在緩存,valueOf也是直接new 對象
static Float valueOf(float f) 技術分享圖片
static Float valueOf(String s) 依賴parseFloat方法
所以上面說跟valueOf(String)表現效果相同,本身就是一樣
技術分享圖片

Float沒有 decode方法

XXXValue系列

類似之前介紹的其他數值類型
全部都是強轉內部的 value
return (XXX)value;
byteValue() shortValue() intValue() longValue() floatValue() doubleValue()

toString toXXXString 系列

static String toString(float f) 靜態方法
技術分享圖片
String toString() 實例方法
內部調用 static String toString(float f)
技術分享圖片
static String toHexString(float f) 靜態方法
返回 float 參數的十六進制字符串表示形式
技術分享圖片
toString系列好像沒什麽好說的,又好像有很多要說的 用到的時候對於格式字符的規定有疑惑直接查看API

equals

boolean equals(Object obj) 將此對象與指定對象進行比較 當且僅當參數不是 null 而是 Float 對象,且表示的 float 值與此對象表示的 float 值相同時,結果為 true 為此,當且僅當將方法 #floatToLongBits(double) 應用於兩個值所返回的 int 值相同時,才認為這兩個 float 值相同 註意,在大多數情況下,對於 Float 類的兩個實例 f1 和 f2,當且僅當 f1.floatValue() == f2.floatValue() 的值為 true 時,f1.equals(f2) 的值才為 true。但是,有以下兩種例外情況: 如果 f1 和 f2 都表示 Float.NaN,那麽即使 Float.NaN==Float.NaN 的值為 false,equals 方法也將返回 true 所以此處使用的是floatToIntBits,而不是raw的 如果 f1 表示 +0.0f,而 f2 表示 -0.0f,或相反,那麽即使 0.0f==-0.0f 的值為 true,equal 測試也將返回 false 該定義使得哈希表得以正確操作。 技術分享圖片

hashCode

static int hashCode(float value) 靜態方法
獲得一個value的hashcode值
技術分享圖片
int hashCode() 實例方法
依賴靜態方法
技術分享圖片

其他方法

sum(float, float) 技術分享圖片
max(float, float) 技術分享圖片
min(float, float) 技術分享圖片

總結

其實浮點數的表示形式與使用規範才是重點 Float只是float的包裝,float也只是IEEE754 標準的一個實現,根本還是在於標準的理解

[七]基礎數據類型之Float詳解