W3docs

floatval()

Функция floatval() в PHP преобразует переменную в число с плавающей точкой. Узнайте о синтаксисе, разборе строк и отличиях от приведения типов.

Введение

Функция floatval() — это встроенная функция PHP, которая возвращает значение переменной в виде числа с плавающей точкой (float). Она применяется, когда у вас есть значение неопределённого типа — как правило, string из формы, строки запроса, CSV-файла или JSON-данных — и вам нужно гарантированно получить число, пригодное для арифметических операций.

floatval() является псевдонимом функции doubleval(). В PHP нет отдельного типа doublefloat и double — это одно и то же — поэтому обе функции взаимозаменяемы; в новом коде рекомендуется использовать именно floatval().

Эта страница охватывает синтаксис, правила разбора различных входных данных (включая неочевидное поведение для строк), сравнение с приведением типа (float) и подводные камни, о которых стоит знать.

Синтаксис

float floatval(mixed $value)

Функция принимает один аргумент, $value, и возвращает его значение как float. Аргумент должен быть скалярным (string, int, float или boolean); передача array вернёт 1.0 для непустого array и 0.0 для пустого, а передача object вызовет ошибку.

Пример использования

Приведённый ниже пример преобразует несколько значений разных типов и выводит результат. Обратите внимание: floatval() возвращает float, но когда PHP выводит целочисленный float с помощью echo, он не добавляет .0 — поэтому 42.0 отображается как 42.

php— editable, runs on the server

Здесь $var1 — это числовой string, $var2 — целое число (int), $var3 — boolean, а $var4 — string без ведущего числа. Каждое из них преобразуется в float. Чтобы убедиться, что результат действительно является float (а не полагаться на то, что выводит echo), оберните значение в var_dump(): var_dump(floatval(42)); выведет float(42).

Как разбираются строки

Здесь скрывается самая распространённая ловушка. При получении string функция floatval() считывает ведущую числовую часть и останавливается на первом символе, который не может быть частью числа. Весь string не обязан быть числовым.

<?php
echo floatval("12.5abc") . "\n"; // 12.5  (stops at "a")
echo floatval("  7.0kg")  . "\n"; // 7     (leading whitespace is skipped)
echo floatval("1.0e3")    . "\n"; // 1000  (scientific notation is understood)
echo floatval("$199.99")  . "\n"; // 0     (starts with "$", no leading number)
echo floatval("0x1A")     . "\n"; // 0     (hex strings are NOT parsed)
echo floatval("")         . "\n"; // 0     (empty string)
?>

Ключевые правила:

  • Ведущие пробелы игнорируются; разбор начинается с первого непробельного символа.
  • Научная нотация (1.0e3) и ведущий знак (-3.5, +2) распознаются.
  • Разбор останавливается на первом нечисловом символе, всё после него отбрасывается.
  • Если ведущего числа нет вообще, результатом будет 0.0. Это означает, что строка с валютой вида "$199.99" вернёт 0, а не 199.99 — сначала нужно удалить символ валюты.
  • Шестнадцатеричные строки вида "0x1A" интерпретируются как 0, поскольку разбор останавливается на x.

floatval() и приведение типа (float)

floatval($x) и (float) $x дают одинаковый результат для скалярных значений, поэтому для одного значения приведение типа короче:

<?php
$price = "49.95 USD";
echo floatval($price) . "\n"; // 49.95
echo (float) $price   . "\n"; // 49.95
?>

Преимущество floatval() заключается в том, что это callable (вызываемое значение). Её можно передавать напрямую функциям высшего порядка там, где ключевое слово приведения типа неприменимо:

<?php
$inputs = ["1.5", "2.25", "x", "3"];
$floats = array_map('floatval', $inputs);
print_r($floats);
// Array ( [0] => 1.5 [1] => 2.25 [2] => 0 [3] => 3 )
?>

Если вам нужна строгая валидация — то есть отклонение всего, что не является «чистым» числом, а не молчаливое приведение — используйте is_numeric() или filter_var($x, FILTER_VALIDATE_FLOAT) перед преобразованием, поскольку floatval() никогда не сообщает об ошибке.

Когда использовать

  • Нормализация пользовательских данных ($_POST, $_GET) или CSV/текстовых данных перед математическими операциями.
  • В качестве callback-функции для array_map(), сравнений в usort() и подобного.
  • Преобразование значения с неизвестным типом в гарантированный float.

Если вам нужно целое число, используйте intval(); чтобы изменить тип переменной на месте, используйте settype(); для проверки типа используйте gettype() или is_float(). Общий обзор работы PHP с типами смотрите в разделе Типы данных PHP.

Заключение

floatval() возвращает float-значение любого скаляра и никогда не выбрасывает исключений при некорректных данных — вместо этого она возвращает 0.0. Это делает функцию удобной, но также означает, что при необходимости трактовать отсутствующее или некорректное число как ошибку нужно заранее выполнить валидацию. Помните правило ведущей числовой части в строке ("12.5abc" становится 12.5, "$199.99" становится 0), и используйте floatval() вместо приведения типа там, где нужно передать преобразование как callback.

Практика

Практика
Что такое floatval в PHP и для чего используется?
Что такое floatval в PHP и для чего используется?
Was this page helpful?