浮點基元

float 是單精度 32 位 IEEE 754 浮點數。預設情況下,小數被解釋為雙精度數。要建立 float,只需將 f 附加到十進位制文字。

double doubleExample = 0.5;      // without 'f' after digits = double
float floatExample = 0.5f;       // with 'f' after digits    = float

float myFloat = 92.7f;           // this is a float...
float positiveFloat = 89.3f;     // it can be positive,
float negativeFloat = -89.3f;    // or negative
float integerFloat = 43.0f;      // it can be a whole number (not an int)
float underZeroFloat = 0.0549f;  // it can be a fractional value less than 0

浮點數處理五種常見的算術運算:加法,減法,乘法,除法和模數。

注意:由於浮點錯誤,以下內容可能略有不同。為了清晰和可讀性目的,已經舍入了一些結果(即,加法示例的列印結果實際上是 34.600002)。

// addition
float result = 37.2f + -2.6f;  // result: 34.6

// subtraction
float result = 45.1f - 10.3f;    // result: 34.8

// multiplication
float result = 26.3f * 1.7f;   // result: 44.71

// division
float result = 37.1f / 4.8f;   // result: 7.729166

// modulus
float result = 37.1f % 4.8f;   // result: 3.4999971

由於儲存浮點數的方式(即以二進位制形式),許多數字沒有精確的表示。

float notExact = 3.1415926f;
System.out.println(notExact); // 3.1415925

雖然使用 float 對於大多數應用來說都沒問題,但是 floatdouble 都不應該用於儲存十進位制數字的精確表示(如貨幣金額),或者需要更高精度的數字。相反,應該使用 BigDecimal 類。

float 的預設值是 0.0f

float defaultFloat;    // defaultFloat == 0.0f

float 精確到大約 1000 萬分之一的誤差。

注意: Float.POSITIVE_INFINITYFloat.NEGATIVE_INFINITYFloat.NaNfloat 的值。NaN 代表無法確定的操作結果,例如劃分 2 個無限值。此外 0f-0f 是不同的,但 == 產生 true:

float f1 = 0f;
float f2 = -0f;
System.out.println(f1 == f2); // true
System.out.println(1f / f1); // Infinity
System.out.println(1f / f2); // -Infinity
System.out.println(Float.POSITIVE_INFINITY / Float.POSITIVE_INFINITY); // NaN