Is double: примеры (PHP)
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)
- is_float() — абсолютный аналог is_double(). Предпочтение — вопрос стиля кодирования.
- is_int() и is_integer() — проверяют, является ли переменная целым числом.
- is_numeric() — более широкая проверка. Возвращает true не только для чисел типов int и float, но и для строк, содержащих допустимое числовое представление (например, "123.45"). Используется, когда важна числовая сущность, а не строгий тип.
- gettype() — возвращает строку с именем типа переменной. Позволяет точно определить тип, но проверка требует сравнения строк.
Функцию is_double() выбирают, когда необходима строгая проверка именно на тип float, исключая целые числа и числовые строки.
Наиболее частая ошибка — использование is_double() там, где подойдет is_numeric(), что приводит к неверным результатам для числовых строк.
<?php
$input = "15.75";
if (is_double($input)) {
echo 'Это число типа float.';
} else {
echo 'Это НЕ число типа float.'; // Сработает эта ветка
}
?>Это НЕ число типа float.
Результат целочисленной операции может быть автоматически приведен к float, что иногда приводит к неочевидному поведению.
<?php
$result = 10 / 2; // Результат 5 (int в PHP 8+, но в некоторых старых версиях мог быть float)
var_dump(is_double($result));
?>// В PHP 8 и выше: bool(false) // В PHP 7.x и ниже результат мог быть bool(true) в зависимости от контекста.
Для функции 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
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
$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
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)
Для проверки типа используется функция isinstance() или сравнение type().
value = 3.14
print(isinstance(value, float)) # True
print(type(value) is float) # True
value2 = 42
print(isinstance(value2, float)) # FalseTrue True False
Оператор 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'); // falsetrue true false false
Проверка типа данных осуществляется на уровне схемы таблицы (столбцы типа FLOAT, DOUBLE). В запросах можно использовать функции типа CAST() для преобразования, но прямой аналог is_double() отсутствует.