浮点基元

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