[七]基礎數據類型之Float詳解
阿新 • • 發佈:2018-10-08
true 返回 ont wid 標準化 sna font 分享 字符串
Float 基本數據類型float 的包裝類
Float 類型的對象包含一個 float 類型的字段
這些屬性,看過上一篇浮點數簡介的話,可以很清晰的理解
浮點數有幾種特殊的表示,比如 無窮 NaN等
額外的,也提供了一些相關的方法
toString系列好像沒什麽好說的,又好像有很多要說的
用到的時候對於格式字符的規定有疑惑直接查看API
屬性簡介
用來以二進制補碼形式表示 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 可以進行互相轉換
|
||||
將表示形式轉換為Float,返回對應於給定位表示形式的
float 值 本地方法 其實就是按照布局計算float 如果參數為 0x7f800000,則結果為正無窮大 如果參數為 0xff800000,則結果為負無窮大 如果參數值在 0x7f800001 到 0x7fffffff 或在 0xff800001 到 0xffffffff 之間,則結果為 NaN Java 提供的任何 IEEE 754 浮點操作都不能區分具有不同位模式的兩個同類型 NaN 值 不同的 NaN 值只能使用 Float.floatToRawIntBits 方法區分 |
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 參數的十六進制字符串表示形式 |
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詳解