W3docs

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() для просмотра реального результата:

php— editable, runs on the server

$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 или более поздние версии.

Практика

Практика
Какова функция 'is_double' в PHP?
Какова функция 'is_double' в PHP?
Was this page helpful?