Floating point numbers
Floating point numbers (AKA "floats", "doubles"
or "real numbers") can be specified using any of
the following syntaxes:
<?php
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
?>
Formally:
LNUM [0-9]+
DNUM ([0-9]*[\.]{LNUM}) | ({LNUM}[\.][0-9]*)
EXPONENT_DNUM ( ({LNUM} | {DNUM}) [eE][+-]? {LNUM})
The size of a float is platform-dependent, although a maximum
of ~1.8e308 with a precision of roughly 14 decimal digits
is a common value (that's 64 bit IEEE format).
Floating point precision
It is quite usual that simple decimal fractions like 0.1
or 0.7 cannot be converted into their internal binary counterparts
without a little loss of precision. This can lead to confusing
results: for example, floor((0.1+0.7)*10) will usually return
7 instead of the expected 8 as the result of the internal
representation really being something like 7.9999999999....
This is related to the fact that it is impossible to exactly
express some fractions in decimal notation with a finite
number of digits. For instance, 1/3 in decimal form becomes
0.3333333. . ..
So never trust floating number results to the last digit
and never compare floating point numbers for equality. If
you really need higher precision, you should use the arbitrary
precision math functions or gmp functions instead.
Converting to float
For information on when and how strings are converted to
floats, see the section titled String conversion to numbers.
For values of other types, the conversion is the same as
if the value would have been converted to integer and then
to float. See the Converting to integer section for more
information.
|