A float
is a single-precision 32-bit IEEE 754 floating point number. By default, decimals are interpreted as doubles. To create a float
, simply append an f
to the decimal literal.
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
Floats handle the five common arithmetical operations: addition, subtraction, multiplication, division, and modulus.
Note: The following may vary slightly as a result of floating point errors. Some results have been rounded for clarity and readability purposes (i.e. the printed result of the addition example was actually 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
Because of the way floating point numbers are stored (i.e. in binary form), many numbers don't have an exact representation.
float notExact = 3.1415926f;
System.out.println(notExact); // 3.1415925
While using float
is fine for most applications, neither float
nor double
should be used to store exact representations of decimal numbers (like monetary amounts), or numbers where higher precision is required. Instead, the BigDecimal
class should be used.
The default value of a float
is 0.0f.
float defaultFloat; // defaultFloat == 0.0f
A float
is precise to roughly an error of 1 in 10 million.
Note: Float.POSITIVE_INFINITY
, Float.NEGATIVE_INFINITY
, Float.NaN
are float
values. NaN
stands for results of operations that cannot be determined, such as dividing 2 infinite values. Furthermore 0f
and -0f
are different, but ==
yields 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