Как преобразовать строку в число в PHP?

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

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

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

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

Есть несколько способов сделать это:

  1. Передача строк в числовые примитивные типы данных:

     $num = (int) "10"; $num = (double) "10.12"; // same as (float) "10.12"; 
  2. Выполните математические операции над строками:

     $num = "10" + 1; $num = floor("10.1"); 
  3. Используйте intval() или floatval() :

     $num = intval("10"); $num = floatval("10.1"); 
  4. Используйте settype() .

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

Однако в этом очень мало смысла, поскольку PHP будет делать это автоматически во время использования этой переменной, и в любом случае он будет передан в строку во время вывода.

Обратите внимание, что вы можете захотеть сохранить точечные числа в виде строк, потому что после кастинга до плавания его можно изменить непредсказуемо из-за природы чисел с плавающей точкой.

Вы можете использовать:

 (int)(your value); 

Или вы можете использовать:

 intval(string) 

Чтобы избежать проблем, попробуйте intval($var) . Некоторые примеры:

 <?php echo intval(42); // 42 echo intval(4.2); // 4 echo intval('42'); // 42 echo intval('+42'); // 42 echo intval('-42'); // -42 echo intval(042); // 34 (octal as starts with zero) echo intval('042'); // 42 echo intval(1e10); // 1410065408 echo intval('1e10'); // 1 echo intval(0x1A); // 26 (hex as starts with 0x) echo intval(42000000); // 42000000 echo intval(420000000000000000000); // 0 echo intval('420000000000000000000'); // 2147483647 echo intval(42, 8); // 42 echo intval('42', 8); // 34 echo intval(array()); // 0 echo intval(array('foo', 'bar')); // 1 ?> 

Если вы хотите получить float для $value = '0.4' , но int для $value = '4' , вы можете написать:

 $number = ($value == (int) $value) ? (int) $value : (float) $value; 

Немного грязно, но это работает.

Вы можете использовать (int)_value_ например.

 $string = '100'; $int = (int)$string; 

См. Тип Жонглирование .

Просто небольшое примечание к ответам, которые могут быть полезными и безопасными в некоторых случаях. Вы можете проверить, действительно ли строка содержит действительное числовое значение и только затем преобразовать его в числовой тип (например, если вам нужно манипулировать данными, поступающими из db, который преобразует ints в строки). Вы можете использовать is_numeric() а затем floatval() :

 $a = "whatever"; // any variable if (is_numeric($a)) var_dump(floatval($a)); // type is float else var_dump($a); // any type 

В PHP вы можете использовать функции intval(string) or floatval(string) для преобразования строк в числа.

Вместо того, чтобы выбирать погоду для преобразования string в int или float . Вы можете просто добавить к нему 0 и PHP автоматически преобразует результат в числовой тип.

 // being sure the string is actually a number if( is_numeric($string) ) $number = $string + 0; else // let's the number be 0 if the string is not a number $number = 0; 

Я обнаружил, что в JavaScript простой способ конвертировать строку в число – это умножить ее на 1. Она разрешает проблему конкатенации, потому что символ «+» имеет многократное использование в JavaScript, а символ «*» – это чисто для математического умножения.

Основываясь на том, что я видел здесь в отношении PHP, автоматически готов интерпретировать строку, содержащую цифру, в виде числа (и комментарии о добавлении, поскольку в PHP «+» используется исключительно для математического добавления), этот многократный трюк работает просто отлично для PHP тоже.

Я тестировал его, и он работает … Хотя в зависимости от того, как вы приобрели строку, вам может понадобиться применить функцию trim () к ней, прежде чем умножить на 1.

Вот что я написал для упрощения вещей для себя:

Он также возвращает сокращенные версии логических, целых, двойных и реальных.

 function type($mixed, $parseNumeric = false) { if ($parseNumeric && is_numeric($mixed)) { //Set type to relevant numeric format $mixed += 0; } $t = gettype($mixed); switch($t) { case 'boolean': return 'bool'; //shorthand case 'integer': return 'int'; //shorthand case 'double': case 'real': return 'float'; //equivalent for all intents and purposes default: return $t; } } 

Тип вызова с parseNumeric, установленным в true, преобразует числовые строки перед проверкой типа.

Таким образом:

type ("5", true) вернет int

type ("3.7", true) вернет float

type ("500") вернет строку

Просто будьте осторожны, так как это своего рода метод ложной проверки, и ваша действительная переменная все равно будет строкой. При необходимости вам нужно будет преобразовать действительную переменную в правильный тип. Я просто нуждался в нем, чтобы проверить, должна ли база данных загружать идентификатор элемента или псевдоним, поэтому не имеет никаких неожиданных эффектов, так как в любом случае он будет разбираться как строка во время выполнения.

редактировать

Если вы хотите определить, являются ли объекты функциями, добавьте этот случай к коммутатору:

 case 'object': return is_callable($mixed)?'function':'object'; 

Вы всегда можете добавить к нему нуль!

 Input Output '2' + 0 2 (int) '2.34' + 0 2.34 (float) '0.3454545' + 0 0.3454545 (float) 
 $a = "10"; $b = (int)$a; 

Вы можете использовать это, чтобы преобразовать строку в int в PHP .

Вы можете использовать:

 ((int) $var) ( but in big number it return 2147483647 :-) ) 

Но лучшим решением является использование:

 if (is_numeric($var)) $var = (isset($var)) ? $var : 0; else $var = 0; 

Или

 if (is_numeric($var)) $var = (trim($var) == '') ? 0 : $var; else $var = 0; 

Попробуйте использовать что-то вроде этого:

 <?php $string='5';// $ string is a variable to hold string '5' $int=intval($string);// $int is the converted string to integer $int=intval('5'); echo$int;//5 ?> 
  $num = "3.14"; $int = (int)$num; // output = 3 $float = (float)$num; // output = 3.14 $double = (double)$num; // output = 3.14 

вы можете преобразовать строку в число на PHP с помощью cast.

Вот функция, которая достигает того, что вы ищете. Сначала мы проверяем, можно ли понимать значение как число, если это так, мы превратим его в int и float. Если int и float одинаковы (например, 5 == 5.0), мы возвращаем значение int. Если int и float не совпадают (например, 5! = 5.3), то мы предполагаем, что вам нужна точность float и вернуть это значение. Если значение не является числовым, мы бросаем предупреждение и возвращаем значение null.

 function toNumber($val) { if (is_numeric($val)) { $int = (int)$val; $float = (float)$val; $val = ($int == $float) ? $int : $float; return $val; } else { trigger_error("Cannot cast $val to a number", E_USER_WARNING); return null; } } 

В дополнение к ответу Бойкодеву я предлагаю следующее:

 Input Output '2' * 1 2 (int) '2.34' * 1 2.34 (float) '0.3454545' * 1 0.3454545 (float) 

Вы можете изменить тип данных следующим образом

 $number = "1.234"; echo gettype ($number) . "\n"; //Returns string settype($number , "float"); echo gettype ($number) . "\n"; //Returns float 

По историческим причинам «double» возвращается в случае поплавка.

Документация PHP

Для вашего конкретного случая вы можете просто умножить на 1, чтобы преобразовать строку в число в php. PHP автоматически обрабатывает плавающее и целое число.

 $num = "2.12"; var_dump(is_float($num)); //bool(false) var_dump(is_int($num)); //bool(false) var_dump(is_string($num)); //bool(true) $num = $num*1; var_dump(is_float($num)); //bool(true) var_dump(is_int($num)); //bool(false) var_dump(is_string($num)); //bool(false) 

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

 <?php $str="3.148"; $num=$str; printf("%f\n", $num); ?> 

все предложения освобождают числовой тип, это кажется мне лучшей практикой

 function str2num($s){ //returns a num or FALSE $return_value = !is_numeric($s) ? false : (intval($s)==floatval($s)) ? intval($s) :floatval($s); print "\nret=$return_value type=".gettype($return_value)."\n"; } 

Разный подход:

  1. перетащите все это в массив / ассоциативный массив.
  2. json_encode($your_array, JSON_NUMERIC_CHECK ); опционально декодировать его обратно
  3. ?
  4. прибыль!
 $a = "7.2345"; $b = round(((float)$a),0);