Числа с плавющей точкой

Числа с плавющей точкой (они же числа двойной точности или действительные числа) могут быть определены при помощи любого из следующих синтаксисов:

$a = 1.234; $a = 1.2e3; $a = 7E-10;

Формально:

LNUM          [0-9]+
DNUM          ([0-9]*[\.]{LNUM}) | ({LNUM}[\.][0-9]*)
EXPONENT_DNUM ( ({LNUM} | {DNUM}) [eE][+-]? {LNUM})

Размер целого зависит от платформы, хотя максимум, как правило, ~1.8e308 с точностью около 14 десятичных цифр (это 64-битный IEEE-формат).

Точность числа с плавающей точкой

Довольно часто простые десятичные дроби вроде 0.1 или 0.7 не могут быть конвертированы в свои внутренние двоичные аналоги без небольшой потери точности. Это может привести к неожиданным результатам: например, floor((0.1+0.7)*10) скорее всего возвратит 7 вместо ожидаемой 8 как результат внутреннего представления числа, являющегося в действительности чем-то вроде 7.9999999999....

Это связано с невозможностью точно выразить некоторые дроби в десятичной системе счисления конечным числом цифр. Например, 1/3 в десятичной форме принимает вид 0.3333333. . ..

Так что никогда не доверяйте точности последних цифр в результатах с числами с плавающей точкой и никогда не проверяйте их на равенство. Если вам дейсвительно необходима высокая точность, вам следует использовать математические функции произвольной точности или gmp-функции.

Конвертация в число с плавающей точкой

О том когда и как строки конвертируются в числа с плавающей точкой читайте в разделе Конвертация строк в числа. Для значений других типов конвертация будет такой же, как если бы значение сначала было конвертировано в целое, а затем в число с плавающей точкой. Дополнительную информацию смотрите в разделе Конвертация в целое.