#php #string #type-conversion
#php #строка #тип-преобразование
Вопрос:
У меня есть неизвестная строка, которая может напоминать float. В этом случае я хочу преобразовать ее в float (для вычислений), в противном случае оставить ее в виде строки.
Как мне определить, представляет ли строка число с плавающей запятой?
$a = "1.23"; // convert $a to 1.23
$b = "1.2 to 1.3"; // leave $b as is
Автоматическое преобразование строки преобразовало бы последнюю в 1.2
, но это не то, что я хочу.
Комментарии:
1. Как насчет просто
1
? php.net/manual/en/function.is-numeric.php
Ответ №1:
Вы можете использовать функцию is_numeric() для проверки переменной, которая может содержать число. Например:
$a = "1.23";
if (is_numeric($a)) {
$a = (float)$a;
}
$b = "1.2 to 1.3";
if (is_numeric($b)) {
$b = (float)$b;
}
var_dump([
'a' => $a,
'b' => $b
]);
Вывод
массив (размер = 2) ‘a’ => float 1.23 ‘b’ => строка ‘1.2 — 1.3’ (длина = 10)
Ответ №2:
Вы можете использовать следующее, чтобы проверить, является ли строка float:
$a = "1.23";
$isFloat = ($a == (string)(float)$a);
Ответ №3:
function StrToFloat($var){
if(is_numeric($var)){
return (float)$var;
} else return $var;
}
$a = "1.23"; // convert $a to 1.23
$b = "1.2 to 1.3"; // leave $b as is
$a = StrToFloat($a); // $a = 1.23
$b = StrToFloat($b); // $b = "1.2 to 1.3"
Комментарии:
1. Фактически то же самое, что и ответ @Maxim, только красиво обернутый внутри функции.
Ответ №4:
Потому что это не было упомянуто
if(preg_match('/^d .d $/', $string)){
$float = (float)$string;
}
Я думаю, is_numeric
это лучший выбор, но это тоже работает.
То, что у меня есть выше, соответствует только числам с плавающей запятой, поэтому они должны иметь десятичную дробь. Чтобы сделать это необязательным, используйте /^d (.d )?$/
вместо этого.
^
начало строкиd
одна или более цифр.
точка, буквальноd
одна или более цифр$
конец строки
Для второго /^d (.d )?$/
это то же самое, что и выше, за исключением этого добавления:
(...)?
необязательная группа захвата, сопоставьте этот столбец 0 или 1 раз.
Теперь должно быть очевидно, что десятичное число является необязательным.
Приветствия!
Ответ №5:
возможно, вы хотели бы использовать не зависящую от локали функцию floatval:
float floatval ( mixed $var )
— Возвращает значение строки с плавающей точкой.
Пример из документации:
$string = '122.34343The';
$float = floatval($string);
echo $float; // 122.34343
Комментарии:
1. Я не понимаю, как это работает.
floatval($string) == $string
кажется, что это всегда верно.2. обычно он возвращает только float (0, если это не числовое значение, а значение float), но, перечитав ваш пост, я понимаю, что
$b = "1.2 to 1.3"
также вернет1.2
sorry