浮点基元
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
对于大多数应用来说都没问题,但是 float
和 double
都不应该用于存储十进制数字的精确表示(如货币金额),或者需要更高精度的数字。相反,应该使用 BigDecimal
类。
float
的默认值是 0.0f 。
float defaultFloat; // defaultFloat == 0.0f
float
精确到大约 1000 万分之一的误差。
注意: Float.POSITIVE_INFINITY
,Float.NEGATIVE_INFINITY
,Float.NaN
是 float
的值。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