PHP :: Вещественные числа
Синтаксис вещественных чисел в PHP
Вещественные числа (по-другому числа с плавающей точкой) записываются в одном из форматов, представленном в примере №1. Числа, расположенные в третьей и четвертой строках, представляют собой записи вещественных чисел в экпоненциальной форме, где вместо 10 в указанной степени используется прописная или строчная буква E, после которой ставится необязательный знак плюс + или минус - и в конце записывается показатель степени числа 10.
<?php //Положительное вещественное число $a=123.45; //Отрицательное вещественное число $b=-123.45; //Тоже самое, что и -0.45, т.к. ноль разрешается опускать $c=-.45; //Тоже самое, что и 123.45 $d=1.2345e2; //Тоже самое, что и 0.0012345 $e=1.2345E-3; ?>
Пример №1. Запись вещественных чисел в различных форматах
Числа с плавающей точкой имеют ограниченную точность, что может иногда приводить к неожиданным результатам (см. пример №2). Это связано с тем, что мы в основном привыкли вести расчеты в десятичной системе счисления, а компьютер перед вычислениями преобразует все числа в двоичную систему. Но не все вещественные числа могут быть точно преобразованы из десятичной системы счисления в двоичную, что и приводит к некоторой потере точности. Поэтому не стоит сравнивать вещественные числа и доверять их точности до последнего знака. Если же необходима высокая точность представления вещественных чисел, следует использовать специальные математические функции PHP произвольной точности, которые позволяют задать требуемую точность результата.
<?php $a=0.7; $b=0.1; //Функция floor() округляет число вниз $c=floor(($a+$b)*10); //Выведет 7 вместо ожидаемых 8 echo $c; /* При переводе чисел в двоичную систему была потеряна точность и поэтому округление вниз применялось не к числу 8, а какому-то другому, меньшему числу, но близкому к 8 */ ?>
Пример №2. Побочные эффекты сложения вещественных чисел
Константа NAN
Операции с вещественными числами иногда могут приводить к специальному нечисловому результату, который в PHP представлен константой NAN (от англ. not a number). Обычно это может быть связано с выполнением недопустимых математических операций над числами или выходом за допустимый диапазон значений для данной математической функции.
Любое сравнение значения NAN с другим значением, даже с самим собой, всегда вернет FALSE, поэтому для определения ее наличия необходимо использовать специальную функцию is_nan(), которая вернет TRUE, если значение NAN, и FALSE в противном случае (см. пример №3).
<?php //Пытаемся извлечь квадратный корень из //отрицательного числа, используем функцию sqrt() $a=sqrt(-10); //Выведет 'NAN' (не число) echo $a.'<br>'; //Выведет '1', что соответствует 'true', т.к. оператор echo выводит //текст и перед выводом преобразует все типы данных в строковый тип echo is_nan($a); //Можно использовать и сравнение на 'не равно', ведь //если значение переменной является NaN, то сравнение //вернет true, т.к. только NaN не равно само себе!!! //Здесь мы присвоили результат сравнения переменной $b $b=($a!=$a); //Выведет '1', что соответствует 'true' echo $b.'<br>'; ?>
Пример №3. Константа NAN
Быстрый переход к другим страницам
- Целые числа в PHP
- Вещественные числа в PHP
- Строки в PHP
- Вернуться к оглавлению учебника