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

 
 
Float 基本數據類型float  的包裝類
Float 類型的對象包含一個 float 類型的字段
image_5bbad0f1_7640  

屬性簡介

用來以二進制補碼形式表示 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");
可以表示的最大值
只有標準化一種形式,也就是前文提到過的
image_5bbad0f1_75e8
public static final float MAX_VALUE = 0x1.fffffeP+127f;
標準化的最小值
image_5bbad0f1_214a
public static final float MIN_NORMAL = 0x1.0p-126f;
最小值還有非標準化的形式
image_5bbad0f1_1285
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) image_5bbad0f1_4d5f
Float(String s) image_5bbad0f1_7726
Float(double value) 直接強轉
image_5bbad0f1_18ff
 

經常使用方法

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

floatToRawIntBits
若是參數爲正無窮大,則結果爲 0x7f800000
若是參數爲負無窮大,則結果爲 0xff800000
若是參數爲 NaN,則結果是表示實際 NaN 值的整數
與 floatToIntBits 方法不一樣,floatToRawIntBits 不壓縮全部將 NaN 編碼爲一個「規範」NaN 值的位模式。
 
在全部狀況下,結果都是一個整數,將其賦予 intBitsToFloat(int) 方法將生成一個與 floatToRawIntBits 的參數相同的浮點值
 
本地方法
image_5bbad0f1_2259
floatToIntBits
若是參數爲正無窮大,則結果爲 0x7f800000
若是參數爲負無窮大,則結果爲 0xff800000
若是參數爲 NaN,則結果爲 0x7fc00000
 
在全部狀況下,結果都是一個整數
將其賦予 intBitsToFloat(int) 方法將生成一個浮點值,該浮點值與 floatToIntBits 的參數相同
(而全部 NaN 值則會生成一個「規範」NaN 值)
 
依賴floatToRawIntBits
image_5bbad0f1_72b3
將表示形式轉換爲Float,返回對應於給定位表示形式的 float 值
本地方法
其實就是按照佈局計算float
image_5bbad0f1_7297

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

比較

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

parseXXX系列

字符串解析 爲 基本類型,
不須要對象,因此都是靜態方法
image_5bbad0f2_10b1
返回一個字符串形式表示的基本類型float
表現效果同valueOf(String),不過valueOf 返回的是對象
若是String是null或者不包含能夠解析的字符串將會拋出異常
底層依賴sun.misc.FloatingDecimal
image_5bbad0f2_5467

 
 

valueOf系列

把基本基本類型 包裝爲對象
用來建立得到對象,因此無需對象,全都是靜態方法
image_5bbad0f2_6662
 
不一樣於以前介紹的整數 數值,他們都有緩衝
float不存在緩存,valueOf也是直接new 對象
static Float valueOf(float f) image_5bbad0f2_234c
static Float valueOf(String s) 依賴parseFloat方法
因此上面說跟valueOf(String)表現效果相同,自己就是同樣
image_5bbad0f2_356f
 
 

Float沒有 decode方法

XXXValue系列

相似以前介紹的其餘數值類型
所有都是強轉內部的  value
return (XXX)value;
byteValue()
shortValue()
intValue()
longValue()
floatValue()
doubleValue()

toString  toXXXString  系列

static String toString(float f) 靜態方法
image_5bbad0f2_c
String toString() 實例方法
內部調用  static String toString(float f)
image_5bbad0f2_4a12
static String toHexString(float f) 靜態方法
返回 float 參數的十六進制字符串表示形式
image_5bbad0f2_279b
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
該定義使得哈希表得以正確操做。
image_5bbad0f2_70a3

hashCode

static int hashCode(float value) 靜態方法
得到一個value的hashcode值
image_5bbad0f2_7357
int hashCode() 實例方法
依賴靜態方法
image_5bbad0f2_9c2

其餘方法

sum(float, float) image_5bbad0f2_319
max(float, float) image_5bbad0f2_58be
min(float, float) image_5bbad0f2_6c7f
 

總結

其實浮點數的表示形式與使用規範纔是重點
Float只是float的包裝,float也只是IEEE754 標準的一個實現,根本仍是在於標準的理解
相關文章
相關標籤/搜索