is_double()
Функция is_double() — устаревший псевдоним is_float() в PHP. Проверяет, является ли переменная числом с плавающей точкой.
Введение
is_double() был псевдонимом is_float(), который проверяет, содержит ли переменная число с плавающей точкой. Float (также называемый double) — это тип данных, который PHP использует для чисел с дробной частью, например 3.14 или 1.0e6.
Важно:
is_double()был признан устаревшим давно и удалён в PHP 8.0.0. В любой версии PHP предпочтительнее использоватьis_float()— поведение идентично, функция поддерживается и лучше читается. Эта страница документируетis_double(), чтобы вы могли распознать и обновить устаревший код, в котором она всё ещё используется.
В этой главе рассмотрены синтаксис, что считается числом с плавающей точкой, как ведёт себя возвращаемое значение, рекомендуемая замена и типичные ловушки.
Синтаксис
is_double(mixed $value): boolПринимает один параметр $value — переменную для проверки — и возвращает true, если $value имеет тип float, либо false в противном случае. Проверяется именно тип, а не то, выглядит ли число как десятичное — см. ловушки ниже.
Что считается числом с плавающей точкой
is_double() (и is_float()) возвращает true только тогда, когда тип переменной во время выполнения равен float. Числовые строки и целые числа не являются числами с плавающей точкой:
<?php
var_dump(is_float(3.14)); // bool(true)
var_dump(is_float(1.0e6)); // bool(true) — scientific notation is a float
var_dump(is_float(42)); // bool(false) — this is an int
var_dump(is_float("3.14")); // bool(false) — this is a string
var_dump(is_float(10 / 2)); // bool(true) — division always yields a float in PHP
?>Обратите внимание, что 10 / 2 даёт true: в PHP оператор / всегда возвращает float, даже если результат математически является целым числом.
Пример использования
Поскольку вывод булевых значений через echo вводит в заблуждение (true выводит 1, false не выводит ничего), используйте var_dump() для просмотра реального результата:
$price — настоящий float, поэтому проверка возвращает true. $count — целое число, а $label — строка, поэтому оба возвращают false.
Современная замена: is_float()
Замена is_double() — это простое переименование: аргументы и возвращаемое значение остаются теми же:
<?php
// Legacy (removed in PHP 8.0)
// if (is_double($value)) { ... }
// Modern, supported everywhere
$value = 9.99;
if (is_float($value)) {
echo "It's a float";
}
?>Если вам нужно принять числа, которые могут быть float, int или числовой строкой (например, данные из формы), используйте is_numeric() или выполните преобразование с помощью floatval().
Типичные ловушки
- Числовые строки не проходят проверку.
is_float("3.14")возвращаетfalse. Пользовательский ввод из форм или$_GETпоступает в виде строк; сначала проверяйте с помощьюis_numeric(), затем приводите к типу с помощьюfloatval(). - Не сравнивайте числа с плавающей точкой на точное равенство. Из-за двоичного округления
0.1 + 0.2 == 0.3возвращаетfalse. Сравнивайте с допустимой погрешностью. is_doubleне существует в PHP 8+. Вызов этой функции в PHP 8.0 или более поздней версии приводит к фатальной ошибкеError: Call to undefined function is_double().
Смотрите также
is_float()— актуальная, поддерживаемая функция.is_int()— проверка на целое число.is_numeric()— проверка на число или числовую строку.floatval()— преобразование значения в float.gettype()— непосредственная проверка типа переменной.
Заключение
is_double() — удалённый псевдоним is_float(). В новом коде всегда используйте is_float() для проверки, является ли значение числом с плавающей точкой, а об is_double() помните лишь для того, чтобы обновлять устаревшие проекты при их миграции на PHP 8 или более поздние версии.