浮點文字

浮點文字提供的值可以在需要 floatdouble 例項的地方使用。浮點字面量有三種。

  • 簡單的小數形式
  • 縮放的十進位制形式
  • 十六進位制形式

(JLS 語法規則將兩個小數形式組合成一個表單。為便於解釋,我們將它們分開處理。)

floatdouble 文字有不同的文字型別,用字尾表示。各種形式使用字母來表達不同的東西。這些字母不區分大小寫。

簡單的小數形式

最簡單形式的浮點文字由一個或多個十進位制數字和一個小數點(.)和一個可選字尾(fFdD)組成。可選字尾允許你指定文字是 floatfF)或 doubledD)值。預設(當沒有指定字尾時)是 double

例如

 0.0     // this denotes zero
 .0      // this also denotes zero
 0.      // this also denotes zero
 3.14159 // this denotes Pi, accurate to (approximately!) 5 decimal places.
 1.0F    // a `float` literal
 1.0D    // a `double` literal.  (`double` is the default if no suffix is given)

實際上,後跟字尾的十進位制數字也是浮點字面值。

 1F      // means the same thing as 1.0F

十進位制文字的含義是 IEEE 浮點數,它最接近由十進位制浮點形式表示的無限精度數學實數。使用 *round 到 nearest,*將此概念值轉換為 IEEE 二進位制浮點表示。 (十進位制轉換的精確語義在 Double.valueOf(String)Float.valueOf(String) 的 javadocs 中指定,請記住數字語法有所不同。)

縮放的十進位制形式

縮放的十進位制形式由簡單的小陣列成,由 Ee 引入的指數部分,後跟有符號整數。指數部分是一個簡寫,用於將十進位制形式乘以 10 的冪,如下面的示例所示。還有一個可選的字尾來區分 floatdouble 文字。這裡有些例子:

 1.0E1    // this means 1.0 x 10^1 ... or 10.0 (double)
 1E-1D    // this means 1.0 x 10^(-1) ... or 0.1 (double)
 1.0e10f  // this means 1.0 x 10^(10) ... or 10000000000.0 (float)

文字的大小受到表示(floatdouble)的限制。如果比例因子導致值太大或太小,則編譯錯誤。

十六進位制形式

從 Java 6 開始,可以用十六進位制表示浮點文字。十六進位制形式與簡單和縮放的十進位制形式具有類似的語法,但有以下區別:

  1. 每個十六進位制浮點文字都以零(0)開頭,然後是 xX
  2. 數字的數字(但不是指數部分!)還包括十六進位制數字 af 及其大寫等價物。
  3. 指數是強制性的,由字母 p(或 P)代替 eE 引入。指數表示比例因子,其為 2 的冪而不是 10 的冪。

這裡有些例子:

0x0.0p0f    // this is zero expressed in hexadecimal form (`float`)
0xff.0p19   // this is 255.0 x 2^19 (`double`)

建議:由於大多數 Java 程式設計師都不熟悉十六進位制浮點形式,因此建議謹慎使用它們。

下劃線

從 Java 7 開始,在所有三種浮點文字形式的數字字串中都允許使用下劃線。這也適用於指數部分。請參閱使用下劃線以提高可讀性

特別案例

如果浮點文字表示太大或太小而無法在所選表示中表示的數字,則編譯錯誤; 即如果數字溢位到+ INF 或 -INF,或下溢到 0.0。但是,文字表示非零非規範化數字是合法的。

浮點文字語法不提供 IEEE 754 特殊值的文字表示,例如 INF 和 NaN 值。如果需要在原始碼中表達它們,推薦的方法是使用 java.lang.Floatjava.lang.Double 定義的常量; 例如 Float.NaNFloat.NEGATIVE_INFINITYFloat.POSITIVE_INFINITY