Я хочу преобразовать эти типы значений '3'
, '2.34'
, '0.234343'
и т.д. в число. В JavaScript мы можем использовать Number()
, но есть ли какой-либо подобный метод, доступный в PHP?
Input Output
'2' 2
'2.34' 2.34
'0.3454545' 0.3454545
Обычно вам не нужно это делать, поскольку PHP в большинстве случаев будет принуждать вас к типу. В ситуациях, когда вы хотите явно преобразовать тип, cast:
$num = "3.14";
$int = (int)$num;
$float = (float)$num;
.
в строке, в этом случае вы бросаете его float
. Но, опять же, это не нужно в большинстве случаев, строка будет работать очень хорошо.
Есть несколько способов сделать это:
Передача строк в числовые примитивные типы данных:
$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()
.
(double)
это просто псевдоним для (float)
.
$num = "10" + 1
).
На любом (слабо типизированном) языке вы всегда можете передать строку в число, добавив к ней нуль.
Однако в этом очень мало смысла, поскольку 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;
Немного грязный, но он работает.
strpos($val, '.') === false ? intval($val) : floatval($val);
Например, вы можете использовать (int)_value_
.
$string = '100';
$int = (int)$string;
См. Тип Жонглирование.
В PHP вы можете использовать функции intval(string) or floatval(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
Вместо того, чтобы выбирать погоду для преобразования string
в int
или float
. Вы можете просто добавить к нему 0
, и PHP автоматически преобразует результат в числовой тип.
// being sure the string is actually a number
if( is_numeric($string) )
$number = $string + 0;
else // let the number be 0 if the string is not a number
$number = 0;
Я обнаружил, что в JavaScript простой способ преобразования строки в число - это умножить ее на 1. Она разрешает проблему конкатенации, потому что символ "+" имеет множество применений в JavaScript, а "*" - символ является чисто математическим умножением.
Основываясь на том, что я видел здесь в отношении PHP, автоматически готов интерпретировать строку, содержащую цифру, в виде числа (и комментарии о добавлении, поскольку в PHP "+" используется исключительно для математического добавления), этот многократный трюк отлично работает и для PHP.
Я тестировал его, и он работает... Хотя в зависимости от того, как вы приобрели строку, вы можете применить к ней функцию trim(), прежде чем умножить на 1.
Вы всегда можете добавить к нему нуль!
Input Output
'2' + 0 2 (int)
'2.34' + 0 2.34 (float)
'0.3454545' + 0 0.3454545 (float)
Вот функция, которую я написал для упрощения для себя:
Он также возвращает сокращенные версии логических, целых, двойных и реальных.
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" ) вернет строку
Просто будьте осторожны, поскольку это своего рода метод ложной проверки, и ваша фактическая переменная все равно будет строкой. При необходимости вам нужно будет преобразовать действительную переменную в правильный тип. Мне просто нужно было проверить, должна ли база данных загружать идентификатор элемента или псевдоним, поэтому никаких неожиданных эффектов не будет, поскольку в любом случае он будет разбираться как строка во время выполнения.
Edit
Если вы хотите определить, являются ли объекты функциями, добавьте этот случай к коммутатору:
case 'object': return is_callable($mixed)?'function':'object';
В дополнение к Boykodev ответ я предлагаю следующее:
Input Output
'2' * 1 2 (int)
'2.34' * 1 2.34 (float)
'0.3454545' * 1 0.3454545 (float)
$num = "3.14";
$int = (int)$num; // output = 3
$float = (float)$num; // output = 3.14
$double = (double)$num; // output = 3.14
вы можете преобразовать строку в число в PHP с помощью cast.
Попробуйте использовать что-то вроде этого:
<?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
?>
$a = "10";
$b = (int)$a;
Вы можете использовать это, чтобы преобразовать строку в int в PHP.
Вот функция, которая достигает того, что вы ищете. Сначала мы проверяем, можно ли понимать значение как число, если это так, мы превратим его в 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;
}
}
В вашем конкретном случае вы можете просто умножить на 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)
Вы можете использовать:
((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;
Вы можете изменить тип данных следующим образом
$number = "1.234";
echo gettype ($number) . "\n"; //Returns string
settype($number , "float");
echo gettype ($number) . "\n"; //Returns float
По историческим причинам "double" возвращается в случае поплавка.
все предложения освобождают числовой тип это кажется мне лучшей практикой
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 сделает это за вас в пределах
<?php
$str="3.148";
$num=$str;
printf("%f\n", $num);
?>
Разный подход:
json_encode($your_array, JSON_NUMERIC_CHECK );
возможно декодировать его обратно$a = "7.2345";
$b = round(((float)$a),0);