Is double: примеры (PHP)

Проверка чисел с плавающей точкой в PHP через is_double
Раздел: Работа с переменными
is_double(mixed $value): bool

Описание функции is_double

Функция is_double() в языке PHP предназначена для проверки типа переменной. Она определяет, является ли переданное значение числом с плавающей точкой (тип double или float). Эта функция выступает псевдонимом для is_float(), и их использование идентично.

Когда применяется функция

Использование функции актуально в ситуациях, когда логика программы зависит от точного типа данных. Это часто требуется при валидации входных данных, обработке числовых расчетов, где важна точность, или перед выполнением операций, специфичных для чисел с плавающей запятой.

Аргументы функции

Функция принимает один обязательный параметр:

  • $value — проверяемая переменная. Может быть любого типа.

Функция возвращает логическое значение: true, если тип переменной — float (double), и false в любом другом случае.

Простая проверка переменных

Пример проверки различных типов данных:

<?php
$var1 = 3.14;
$var2 = 42;
$var3 = "3.14";
$var4 = true;

var_dump(is_double($var1)); // true
var_dump(is_double($var2)); // false
var_dump(is_double($var3)); // false
var_dump(is_double($var4)); // false
?>
bool(true)
bool(false)
bool(false)
bool(false)
Проверка специальных значений
<?php
$nan = acos(8); // Не число (NAN)
$inf = log(0);  // Бесконечность

var_dump(is_double($nan)); // true
var_dump(is_double($inf)); // true
?>
bool(true)
bool(true)
Похожие функции в PHP
  • is_float() — абсолютный аналог is_double(). Предпочтение — вопрос стиля кодирования.
  • is_int() и is_integer() — проверяют, является ли переменная целым числом.
  • is_numeric() — более широкая проверка. Возвращает true не только для чисел типов int и float, но и для строк, содержащих допустимое числовое представление (например, "123.45"). Используется, когда важна числовая сущность, а не строгий тип.
  • gettype() — возвращает строку с именем типа переменной. Позволяет точно определить тип, но проверка требует сравнения строк.

Функцию is_double() выбирают, когда необходима строгая проверка именно на тип float, исключая целые числа и числовые строки.

Распространенные ошибки
1. Путаница с is_numeric

Наиболее частая ошибка — использование is_double() там, где подойдет is_numeric(), что приводит к неверным результатам для числовых строк.

<?php
$input = "15.75";

if (is_double($input)) {
    echo 'Это число типа float.';
} else {
    echo 'Это НЕ число типа float.'; // Сработает эта ветка
}
?>
Это НЕ число типа float.
2. Проверка после арифметических операций

Результат целочисленной операции может быть автоматически приведен к float, что иногда приводит к неочевидному поведению.

<?php
$result = 10 / 2; // Результат 5 (int в PHP 8+, но в некоторых старых версиях мог быть float)
var_dump(is_double($result));
?>
// В PHP 8 и выше:
bool(false)
// В PHP 7.x и ниже результат мог быть bool(true) в зависимости от контекста.
Изменения в PHP 8

Для функции is_double() не было внесено значительных изменений в поведении. Однако, в PHP 8 усилилась строгость системы типов. Например, некоторые арифметические операции, которые раньше могли возвращать float, теперь возвращают int, если результат целочисленный (например, деление с остатком). Это может косвенно влиять на результат проверки.

<?php
// В PHP 7
$val = 10 / 2;
var_dump($val, is_double($val));
?>
// PHP 7.4 вывод:
float(5)
bool(true)

// PHP 8.0 вывод:
int(5)
bool(false)
Расширенные примеры использования
Валидация в пользовательской функции
Пример php
<?php
function calculateSquareRoot($number) {
    if (!is_double($number) && !is_int($number)) {
        throw new InvalidArgumentException('Аргумент должен быть числом (int или float).');
    }
    if ($number < 0) {
        throw new InvalidArgumentException('Нельзя извлечь корень из отрицательного числа.');
    }
    return sqrt($number);
}

try {
    echo calculateSquareRoot(16.0); // 4
    echo calculateSquareRoot(16);   // 4
    echo calculateSquareRoot("16"); // Выбросит исключение
} catch (InvalidArgumentException $e) {
    echo 'Ошибка: ' . $e->getMessage();
}
?>
44Ошибка: Аргумент должен быть числом (int или float).
Фильтрация массива по типу
Пример php
<?php
$data = [1, 3.14, "текст", 2.718, true, null, []];
$floatsOnly = array_filter($data, 'is_double');
print_r($floatsOnly);
?>
Array
(
    [1] => 3.14
    [3] => 2.718
)
Работа с объектами и приведением типов
Пример php
<?php
class Product {
    public $price;
}

$product = new Product();
$product->price = 299.99;

// Проверка свойства объекта
var_dump(is_double($product->price)); // true

// Явное приведение типа
$intValue = (int) $product->price;
var_dump(is_double($intValue)); // false
?>
bool(true)
bool(false)
Аналоги в других языках
Python

Для проверки типа используется функция isinstance() или сравнение type().

value = 3.14
print(isinstance(value, float))  # True
print(type(value) is float)      # True

value2 = 42
print(isinstance(value2, float)) # False
True
True
False
JavaScript

Оператор typeof возвращает строку "number" как для целых, так и для чисел с плавающей точкой. Для дополнительной проверки используется Number.isFinite() или Number.isInteger().

let val = 3.14;
console.log(typeof val === 'number'); // true
console.log(Number.isFinite(val));    // true
console.log(Number.isInteger(val));   // false

let val2 = "3.14";
console.log(typeof val2 === 'number'); // false
true
true
false
false
MySQL

Проверка типа данных осуществляется на уровне схемы таблицы (столбцы типа FLOAT, DOUBLE). В запросах можно использовать функции типа CAST() для преобразования, но прямой аналог is_double() отсутствует.

PHP is_double function comments

En
Is double Alias of is_float