PHP: преобразовать строку в число с плавающей точкой (только если строка представляет число с плавающей точкой) - PullRequest
1 голос
/ 22 марта 2019

У меня есть неизвестная строка, которая может напоминать число с плавающей точкой.В этом случае я хочу преобразовать его в число с плавающей точкой (для расчетов), в противном случае оставьте его в виде строки.

Как определить, представляет ли строка число с плавающей точкой?

$a = "1.23";        // convert $a to 1.23
$b = "1.2 to 1.3";  // leave $b as is

Автоматическое преобразование строки конвертирует последнее в 1.2, но это не то, что я хочу.

Ответы [ 5 ]

5 голосов
/ 22 марта 2019

Вы можете использовать функцию 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)

3 голосов
/ 22 марта 2019

Вы можете использовать следующее, чтобы проверить, является ли строка плавающей точкой:

$a = "1.23";
$isFloat = ($a == (string)(float)$a);
2 голосов
/ 22 марта 2019
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 голос
/ 22 марта 2019

Поскольку это не было упомянуто

if(preg_match('/^\d+\.\d+$/', $string)){
   $float = (float)$string;
}

Я думаю, is_numeric - лучший выбор, но это тоже работает.

То, что у меня есть выше, соответствует только поплавкам, поэтому онидолжен иметь десятичную дробь.Чтобы сделать это необязательным, вместо этого используйте /^\d+(\.\d+)?$/.

  • ^ начало строки
  • \d+ одна или несколько цифр
  • \. точка,буквально
  • \d+ одна или несколько цифр
  • $ конец строки

Для второго /^\d+(\.\d+)?$/ это то же самое, что и выше, за исключениемэто добавление:

  • (...)? необязательная группа захвата, сопоставьте этот шаблон 0 или 1 раз.

То, что теперь должно быть очевидно, это то, что делает десятичную опцию необязательной.

Ура!

0 голосов
/ 22 марта 2019

может быть, вы хотели бы использовать не зависящую от локали функцию floatval :

float floatval ( mixed $var ) - Получает значение с плавающей запятой строки.

Пример из документации:

$string = '122.34343The';
$float  = floatval($string);
echo $float; // 122.34343
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...