W3docs

is_float()

Функция is_float() в PHP проверяет, является ли переменная числом с плавающей точкой. Возвращает boolean.

Введение

is_float() — это встроенная функция PHP, которая проверяет, содержит ли переменная значение с плавающей точкой (число с дробной частью, например 3.14). Она возвращает boolean, поэтому является стандартным способом убедиться, что значение является float, прежде чем выполнять операции, предназначенные только для float.

Важно понимать с самого начала: is_float() проверяет тип переменной, а не её математическое значение. Целое число 5 и float 5.0 равны по значению, но только 5.0 является float. "3.14" (строка с цифрами) не является float — даже несмотря на то, что выглядит как таковой.

На этой странице рассматриваются синтаксис, распространённые случаи и неочевидные моменты, отличие is_float() от похожих функций, а также ситуации, в которых она применяется.

Синтаксис

is_float(mixed $value): bool
ЧастьЗначение
$valueПеременная для проверки. Принимается любой тип.
Return valuetrue если $value имеет тип float, иначе false.

is_double() является псевдонимом is_float() — они работают одинаково, поэтому используйте то имя, которое читается лучше.

Базовый пример

php— editable, runs on the server

Когда вы вызываете echo для boolean, PHP выводит 1 для true и пустую строку для false — именно поэтому вторая строка выглядит пустой. Чтобы увидеть чёткую метку, используйте var_dump():

<?php
var_dump(is_float(3.14));   // bool(true)
var_dump(is_float(42));     // bool(false)
?>

Что считается float (и что нет)

Главная ловушка в том, что числовая строка не является float. is_float() возвращает true только для значений, которые фактически хранятся с типом float.

<?php
var_dump(is_float(3.14));      // bool(true)  — float literal
var_dump(is_float(1.5e3));     // bool(true)  — scientific notation = 1500.0
var_dump(is_float(0.0));       // bool(true)  — zero is still a float
var_dump(is_float(10));        // bool(false) — integer, not float
var_dump(is_float("3.14"));    // bool(false) — string, even though it looks like one
var_dump(is_float(3.14 + 1));  // bool(true)  — float arithmetic yields a float
var_dump(is_float(10 / 3));    // bool(true)  — division produces a float
?>

Обратите внимание, что 10 / 3 является float, хотя оба операнда — целые числа: деление в PHP возвращает float, когда результат не является целым числом.

Работа с числовыми строками

Если ваше значение может быть числовой строкой (например, из $_GET, $_POST или CSV-файла), is_float() вернёт false. Используйте is_numeric() для обнаружения числовых строк или сначала выполните приведение типа:

<?php
$input = "9.99";  // e.g. a price submitted from a form

var_dump(is_float($input));            // bool(false) — it's a string
var_dump(is_numeric($input));          // bool(true)  — looks like a number
var_dump(is_float((float) $input));    // bool(true)  — cast it first
?>

Для полного охвата определения числовых входных данных смотрите is_numeric() и Типы данных PHP.

Практический пример защитной проверки

Распространённый вариант использования — проверка значения перед выполнением вычислений, которые имеют смысл только для float:

<?php
function applyDiscount(mixed $price, float $rate): float
{
    if (!is_float($price)) {
        // normalize numeric strings/ints into a float
        $price = (float) $price;
    }
    return $price - ($price * $rate);
}

echo applyDiscount(49.99, 0.10) . "\n";  // 44.991
echo applyDiscount("20", 0.25) . "\n";   // 15
?>

Связанные функции проверки типов

ФункцияВозвращает true, когда значение является…
is_float() / is_double()float (3.14, 1.5e3)
is_int()целым числом (42)
is_string()строкой ("3.14")
is_numeric()числом или числовой строкой
is_bool()boolean (true/false)

Если вам нужно просто проверить «является ли это числом любого вида, включая строковое представление», используйте is_numeric(). Если вам конкретно нужен тип float, используйте is_float().

Заключение

is_float() (и её псевдоним is_double()) проверяет, имеет ли переменная тип float, возвращая boolean. Помните, что проверяется тип, а не значение: целые числа и числовые строки оба возвращают false, даже если они представляют числа с дробной частью. При работе с пользовательским вводом — который приходит в виде строк — сочетайте is_float() с is_numeric() или выполните приведение с помощью (float) перед тем, как обрабатывать значение как float.

Практика

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