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 value | true если $value имеет тип float, иначе false. |
is_double() является псевдонимом is_float() — они работают одинаково, поэтому используйте то имя, которое читается лучше.
Базовый пример
Когда вы вызываете 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.