29 ответов:
обычно вам не нужно этого делать, так как PHP будет принуждать тип для вас в большинстве случаев. Для ситуаций, когда вы хотите явно преобразовать тип,cast это:
$num = "3.14"; $int = (int)$num; $float = (float)$num;
есть несколько способов сделать это:
приведите строки к числовым примитивным типам данных:
$num = (int) "10"; $num = (double) "10.12"; // same as (float) "10.12";выполнение математических операций над строками:
$num = "10" + 1; $num = floor("10.1");использовать
intval()илиfloatval():$num = intval("10"); $num = floatval("10.1");использовать
settype().
на любом (слабо типизированном) языке вы всегда можете привести строку к числу, добавив к ней ноль.
однако, в этом очень мало смысла, так как PHP будет делать это автоматически во время использования этой переменной, и он будет приведен к строке в любом случае во время вывода.
обратите внимание, что вы можете сохранить пунктирные числа в виде строк, потому что после приведения к плаванию он может быть изменен непредсказуемо, из-за природы чисел с плавающей точкой.
чтобы избежать проблем попробовать
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 ?>
Если вы хотите получить поплавок для
$value = '0.4', но int для$value = '4', вы можете написать:$number = ($value == (int) $value) ? (int) $value : (float) $value;немного грязно, но это работает.
можно использовать
(int)_value_например.$string = '100'; $int = (int)$string;посмотреть Тип Жонглирование.
In PHP можно использовать
intval(string) or floatval(string)функции для преобразования строк в числа.
вы всегда можете добавить ноль к нему!
Input Output '2' + 0 2 (int) '2.34' + 0 2.34 (float) '0.3454545' + 0 0.3454545 (float)
просто небольшое примечание к ответам, которые могут быть полезны и безопаснее в некоторых случаях. Вы можете сначала проверить, действительно ли строка содержит допустимое числовое значение, а затем преобразовать его в числовой тип (например, если вам нужно манипулировать данными, поступающими из БД, которая преобразует 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
вместо того, чтобы выбрать погоду для преобразования
stringtointили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.
вот функция, которую я написал, чтобы упростить вещи для себя:
Он также возвращает сокращенные версии boolean, integer, double и real.
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 преобразует числовые строки перед проверкой типа.
таким образом:
Тип ("5", true) вернет int
тип ("3.7", true) вернет float
тип("500") вернет строку
только будьте осторожны, так как это своего рода метод ложной проверки, и ваша фактическая переменная все равно будет строкой. Вам нужно будет преобразовать фактическую переменную в правильный тип, если это необходимо. Мне просто нужно было проверить, должна ли база данных загружать идентификатор элемента или псевдоним, таким образом, не имея никаких неожиданных эффектов, так как он будет проанализирован как строка во время выполнения в любом случае.
Edit
Если вы хотите определить, являются ли объекты функциями, добавьте этот случай к коммутатору:
case 'object': return is_callable($mixed)?'function':'object';
вот функция, которая достигает того, что вы ищете. Сначала мы проверяем, можно ли понимать значение как число, если это так, мы превращаем его в 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; } }
кроме Boykodev ответ я предлагаю следующее:
Input Output '2' * 1 2 (int) '2.34' * 1 2.34 (float) '0.3454545' * 1 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 .
вы можете изменить тип данных следующим образом
$number = "1.234"; echo gettype ($number) . "\n"; //Returns string settype($number , "float"); echo gettype ($number) . "\n"; //Returns floatпо историческим причинам "double" возвращается в случае float.
для вашего конкретного случая вы можете просто умножить на 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)
все предложения теряют числовой тип это кажется мне лучшей практикой
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"; }
Да, есть подобный метод в PHP, но он настолько мало известен, что вы редко о нем услышите. Это арифметические операторы, называемые"личность", как описано здесь:
чтобы преобразовать числовую строку в число, выполните следующие действия:
$a = +$a;
просто вы можете написать так:
<?php $data = ["1","2","3","4","5"]; echo json_encode($data, JSON_NUMERIC_CHECK); ?>
Я получил вопрос "скажем, вы писали встроенную функцию для приведения целого числа к строке в 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);
Другой Подход:
- вставьте все это в массив / ассоциативный массив.
json_encode($your_array, JSON_NUMERIC_CHECK );дополнительно декодировать его обратно- ?
- профит!
Comments