Как мне преобразовать строку в число в PHP? - PullRequest
545 голосов
/ 16 декабря 2011

Я хочу преобразовать значения этих типов, '3', '2.34', '0.234343' и т. Д. В число.В JavaScript мы можем использовать Number(), но есть ли подобный метод в PHP?

Input             Output
'2'               2
'2.34'            2.34
'0.3454545'       0.3454545

Ответы [ 25 ]

2 голосов
/ 16 декабря 2011

PHP сделает это за вас в пределах

<?php
   $str = "3.148";
   $num = $str;

   printf("%f\n", $num);
?>
0 голосов
/ 15 июня 2019

Я перечитывал ответы и не видел, чтобы кто-нибудь упомянул самую большую оговорку при преобразовании чисел в PHP.

Самый голосующий ответ предлагает сделать следующее:

$str = "3.14"
$intstr = (int)$str // now it's a number equal to 3

Это великолепно. PHP делает прямое приведение. Но что, если мы сделали следующее?

$str = "3.14is_trash"
$intstr = (int)$str

Считает ли PHP такие преобразования допустимыми?

Видимо Да .

PHP читает строку, пока не найдет первый нечисловой символ для требуемого типа. Это означает, что для целых чисел числовые символы равны [0-9]. В результате он читает 3, поскольку он находится в диапазоне символов [0-9], он продолжает читать. Читает . и останавливается там, поскольку он не находится в диапазоне [0-9].

То же самое произошло бы, если бы вы были брошены, чтобы плавать или удваиваться. PHP будет читать 3, затем ., затем 1, затем 4 и останавливаться на i, поскольку это недопустимый числовой символ с плавающей запятой.

В результате "million" >= 1000000 оценивается как ложное, но "1000000million" >= 1000000 оценивается как true.

Смотри также:

https://www.php.net/manual/en/language.operators.comparison.php как выполняются преобразования при сравнении

https://www.php.net/manual/en/language.types.string.php#language.types.string.conversion как строки преобразуются в соответствующие числа

0 голосов
/ 10 декабря 2015

Другой подход:

  1. Вставить все это в массив / ассоциативный массив.
  2. json_encode($your_array, JSON_NUMERIC_CHECK); опционально декодировать обратно
  3. ?
  4. Прибыль!
0 голосов
/ 28 мая 2019

Есть способ:

$value = json_decode(json_encode($value, JSON_NUMERIC_CHECK|JSON_PRESERVE_ZERO_FRACTION|JSON_UNESCAPED_SLASHES), true);

Использование is_* не будет работать, так как variable это: string.

Используя комбинацию json_encode() и затем json_decode(), она преобразуется в «истинную» форму. Если это правда string, то выводится неправильно.

$num = "Me";
$int = (int)$num;
$float = (float)$num;

var_dump($num, $int, $float);

Будет выводить: string(2) "Me" int(0) float(0)

0 голосов
/ 19 января 2018

У меня возник вопрос "скажем, вы писали встроенную функцию для преобразования целого числа в строку в PHP, как бы вы написали эту функцию" в интервью по программированию. Вот решение.

$nums = ["0","1","2","3","4","5","6","7","8","9"];
$int = 15939; 
$string = ""; 
while ($int) { 
    $string .= $nums[$int % 10]; 
    $int = (int)($int / 10); 
} 
$result = strrev($string);
...