numerico - recorrer string php
¿Cómo convierto una cadena a un número en PHP? (29)
Quiero convertir estos tipos de valores, ''3''
, ''2.34''
, ''0.234343''
, etc. a un número. En JavaScript podemos usar Number()
, pero ¿hay algún método similar disponible en PHP?
Input Output
''2'' 2
''2.34'' 2.34
''0.3454545'' 0.3454545
¡Siempre puedes agregarle cero!
Input Output
''2'' + 0 2 (int)
''2.34'' + 0 2.34 (float)
''0.3454545'' + 0 0.3454545 (float)
Además de la respuesta de Boykodev , sugiero esto:
Input Output
''2'' * 1 2 (int)
''2.34'' * 1 2.34 (float)
''0.3454545'' * 1 0.3454545 (float)
Aquí está la función que logra lo que buscas. Primero verificamos si el valor puede entenderse como un número, si es así lo convertimos en un int y un float. Si int y float son iguales (por ejemplo, 5 == 5.0), devolvemos el valor int. Si el int y el flotador no son los mismos (por ejemplo, 5! = 5.3), asumimos que necesita la precisión del flotador y devuelve ese valor. Si el valor no es numérico lanzamos una advertencia y devolvemos nulo.
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;
}
}
Aquí hay una función que escribí para simplificar las cosas para mí:
También devuelve versiones abreviadas de booleano, entero, doble y 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;
}
}
El tipo de llamada con parseNumeric establecido en verdadero convertirá cadenas numéricas antes de verificar el tipo.
Así:
type ("5", true) devolverá int
type ("3.7", true) devolverá float
type ("500") devolverá la cadena
Solo tenga cuidado ya que este es un tipo de método de verificación falso y su variable real seguirá siendo una cadena. Deberá convertir la variable real al tipo correcto si es necesario. Solo lo necesitaba para comprobar si la base de datos debería cargar un ID de elemento o un alias, por lo que no tiene ningún efecto inesperado, ya que de todos modos se analizará como una cadena en tiempo de ejecución.
Editar
Si desea detectar si los objetos son funciones, agregue este caso al conmutador:
case ''object'': return is_callable($mixed)?''function'':''object'';
Descubrí que en JavaScript, una forma sencilla de convertir una cadena en un número es multiplicarla por 1. Resuelve el problema de concatenación, porque el símbolo "+" tiene múltiples usos en JavaScript, mientras que el símbolo "*" es puramente para la multiplicación matemática.
En base a lo que he visto aquí con respecto a PHP, estoy dispuesto a interpretar automáticamente una cadena que contiene dígitos como un número (y los comentarios sobre la adición, ya que en PHP el "+" es simplemente para la suma matemática), este truco múltiple funciona bien. para PHP, también.
Lo he probado y funciona ... Aunque depende de cómo adquirió la cadena, es posible que desee aplicarle la función trim () antes de multiplicar por 1.
En PHP puede usar las intval(string) or floatval(string)
para convertir cadenas en números.
En el idioma que sea (de tipo impreciso), siempre puede convertir una cadena a un número agregándole un cero.
Sin embargo, esto tiene muy poco sentido ya que PHP lo hará automáticamente en el momento de usar esta variable, y se convertirá en una cadena de todos modos en el momento de la salida.
Tenga en cuenta que es posible que desee mantener los números de puntos como cadenas, ya que después de la conversión para flotar, se pueden cambiar de forma impredecible, debido a la naturaleza de los números flotantes.
En lugar de tener que elegir el clima para convertir la string
a int
o float
. Simplemente puede agregarle un 0
y PHP convertirá automáticamente el resultado a un tipo numérico.
// 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;
Enfoque diferente:
- empujarlo todo en una matriz / matriz asociativa.
-
json_encode($your_array, JSON_NUMERIC_CHECK );
opcionalmente decodificarlo de nuevo - ?
- ¡lucro!
Hay algunas maneras de hacerlo:
Convierte las cadenas a tipos de datos primitivos numéricos:
$num = (int) "10"; $num = (double) "10.12"; // same as (float) "10.12";
Realizar operaciones matemáticas en las cuerdas:
$num = "10" + 1; $num = floor("10.1");
Utilice
intval()
ofloatval()
:$num = intval("10"); $num = floatval("10.1");
Utilice
settype()
.
Intenta usar algo como esto:
<?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
?>
Me respondí la pregunta "diga que estaba escribiendo la función incorporada para convertir un entero en una cadena en PHP, cómo escribiría esa función" en una entrevista de programación. Aquí hay una solución.
$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);
Normalmente no es necesario que hagas esto, ya que PHP forzará el tipo para ti en la mayoría de las circunstancias. Para situaciones en las que desea convertir explícitamente el tipo, cast :
$num = "3.14";
$int = (int)$num;
$float = (float)$num;
PHP lo hará por ti dentro de los límites
<?php
$str="3.148";
$num=$str;
printf("%f/n", $num);
?>
Para evitar problemas intente intval() . Algunos ejemplos:
<?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
?>
Para su caso específico, simplemente puede multiplicar por 1 para convertir la cadena en un número en php. PHP se encarga de la flotación y el entero automáticamente.
$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)
Puede cambiar el tipo de datos de la siguiente manera
$number = "1.234";
echo gettype ($number) . "/n"; //Returns string
settype($number , "float");
echo gettype ($number) . "/n"; //Returns float
Por razones históricas se devuelve "doble" en caso de flotación.
Puedes usar:
((int) $var) ( but in big number it return 2147483647 :-) )
Pero la mejor solución es usar:
if (is_numeric($var))
$var = (isset($var)) ? $var : 0;
else
$var = 0;
O
if (is_numeric($var))
$var = (trim($var) == '''') ? 0 : $var;
else
$var = 0;
Puedes usar:
(int)(your value);
O puedes usar:
intval(string)
Sí, hay un método similar en PHP, pero es tan poco conocido que rara vez se escuchará al respecto. Es un operador aritmético llamado " identidad ", como se describe aquí:
Para convertir una cadena numérica en un número, haga lo siguiente:
$a = +$a;
Si desea obtener flotante para $value = ''0.4''
, pero int para $value = ''4''
, puede escribir:
$number = ($value == (int) $value) ? (int) $value : (float) $value;
Poco sucio, pero funciona.
Simplemente puedes escribir así:
<?php
$data = ["1","2","3","4","5"];
echo json_encode($data, JSON_NUMERIC_CHECK);
?>
Solo una pequeña nota a las respuestas que pueden ser útiles y más seguras en algunos casos. Es posible que desee comprobar si la cadena realmente contiene un valor numérico válido primero y solo luego convertirlo en un tipo numérico (por ejemplo, si tiene que manipular datos que provienen de una base de datos que convierte los ints en cadenas). Puedes usar is_numeric()
y luego floatval()
:
$a = "whatever"; // any variable
if (is_numeric($a))
var_dump(floatval($a)); // type is float
else
var_dump($a); // any type
Todas las sugerencias pierden el tipo numérico. Esto me parece una buena práctica.
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";
}
simplemente puede usar la función intval()
para convertir la cadena a int
$num = "3.14";
$int = (int)$num; // output = 3
$float = (float)$num; // output = 3.14
$double = (double)$num; // output = 3.14
puedes convertir una cadena a un número en PHP usando cast.
$a = "10";
$b = (int)$a;
Puedes usar esto para convertir una cadena a un int en PHP .
$a = "7.2345";
$b = round(((float)$a),0);