doubleval()
Узнайте о функции PHP doubleval(), которая преобразует значение в float и является псевдонимом floatval(). Синтаксис, возвращаемые значения и правила разбора строк.
Введение
Функция doubleval() преобразует значение в float (число с дробной частью). Она является точным псевдонимом floatval() — обе функции имеют одну и ту же реализацию. Название существует потому, что PHP исторически называл тип с плавающей точкой «double», а в PHP float и double — это один и тот же тип.
Функция doubleval() (или floatval()) используется тогда, когда у вас есть значение неизвестного или смешанного типа — как правило, string из формы, строки запроса или файла — и вам нужно надёжное число для выполнения арифметических операций.
Синтаксис
doubleval(mixed $value): float$value — это значение для преобразования. Оно может быть string, целым числом, boolean или другим скаляром. Функция возвращает float-значение $value, или 0.0, если значение не может быть интерпретировано как число.
Возвращаемые значения
Поведение doubleval() зависит от типа значения:
- Числовая string — разбирается до первого нечислового символа (
"3.14"→3.14). - Целое число / float — возвращается как float (
42→42.0внутри). - boolean —
true→1.0,false→0.0. null—0.0.- Нечисловая string —
0.0. - array —
1.0для непустого array,0.0для пустого (с предупреждением). Избегайте передачи array.
Базовый пример
Обратите внимание, что вывод показывает 42 и 1, а не 42.0 и 1.0. Значения являются float, но echo выводит float без дробной части без завершающего .0. Чтобы явно увидеть тип float, используйте var_dump():
<?php
var_dump(doubleval(42)); // float(42)
var_dump(doubleval(true)); // float(1)
var_dump(doubleval("3.14")); // float(3.14)
?>Разбор строк с ведущими числами
doubleval() считывает ведущую числовую часть string и останавливается на первом символе, который не может быть частью числа. Пробелы в начале игнорируются, научная нотация поддерживается.
<?php
echo doubleval("12.5kg") . "\n"; // 12.5 (stops at "k")
echo doubleval(" 7.0 ") . "\n"; // 7 (leading spaces ignored)
echo doubleval("1.2e3") . "\n"; // 1200 (scientific notation)
echo doubleval("abc12") . "\n"; // 0 (no leading number)
?>Это удобно для извлечения числа из string с единицами измерения, однако некорректное значение молча становится 0.0, а не вызывает ошибку — если это различие важно, предварительно выполните валидацию.
doubleval() против приведения типа (float)
Для скалярных значений doubleval($x) и (float) $x дают одинаковый результат, поэтому в современном коде обычно предпочитают приведение типа. doubleval() по-прежнему удобна в качестве callback-функции, например с array_map():
<?php
$inputs = ["1.5", "2", "3.75kg"];
$floats = array_map('doubleval', $inputs);
print_r($floats);
// Array ( [0] => 1.5 [1] => 2 [2] => 3.75 )
?>doubleval() против floatval()
Функциональных отличий нет — doubleval() является определённым псевдонимом floatval(). В современном коде следует предпочитать floatval(), поскольку это название более понятно и соответствует имени типа float, используемому повсеместно в PHP.
Заключение
doubleval() преобразует любое скалярное значение в float, разбирая ведущую числовую часть строк и возвращая 0.0, если число не найдено. Она идентична floatval(), которая сегодня является предпочтительным названием. Для преобразования в другие типы см. intval() и settype().