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


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

$float0 = 3.14;            // 3.14
$float1 = 3.14e3;          // 3140
$float2 = 3.14E-3;         // 0.00314

E3 (e3) выше означает умножение на 1000, которое составялет 10 в кубе. E-3 (e-3) означает умножение на 1/1000, которое является обратным числом 10 в кубе.

Для того, чтобы точно преобразовать значение в число с плавающей точкой, используйте (float), который не чувствителен к регистру.

$a = 0.1 / 0.3;
printf("%.20e\r\n", $a);   // print $a down to 20 places of decimals
[result]  
3.33333333333333370341e-1

Как вы видите результат выше, значение не исправить до 15ти знаков после точки. Из-за этих ограничений лучше не использовать прямой операции сравнения чисел с плавающей точкой.

  • NAN
    Некоторые числовые операции могут привести к значению, представленному константой NAN. Этот результат представляет собой неопределенное или непрезентабельное значение в вычислениях с плавающей точкой. Любые свободные или строгие сравнения этого значения в отношении любого другого значения, включая свое собственное, будет иметь результат FALSE.
$float0 = acos(2);
if($float0 == $float0)
    echo "True\r\n";         // result: FALSE
else
    echo "float0\r\n";       // output: NAN
  • INF
    Константа INF пердставляет собой число, которое находится за переделами диапазона представимых вычислений с плавающей точкой.
$float0 = 1.8E+309;
echo "float0";             // output: INF