Quiero convertir estos tipos de valores, '3'
, '2.34'
, '0.234343'
, etc, para 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
php
casting
type-conversion
Sara
fuente
fuente
Respuestas:
Por lo general, no necesita hacer esto, ya que PHP forzará el tipo por usted en la mayoría de las circunstancias. Para situaciones en las que desea convertir explícitamente el tipo, transmítalo :
fuente
.
es el separador de punto decimal. en.wikipedia.org/wiki/…Hay algunas formas de hacerlo:
Convierta las cadenas en tipos de datos primitivos numéricos:
Realice operaciones matemáticas en las cadenas:
Usar
intval()
ofloatval()
:Uso
settype()
.fuente
(double)
es solo un alias para(float)
.$num = "10" + 1
ejemplo).intval("9999999999")==2147483647
.intval
es útil porque luego puedes usarlo enarray_map('intval', $arrayOfStrings);
lo que no puedes hacer con el casting.$num = "10" + 1;
que sea mejor usarlo,$num = "10" * 1;
ya que eso no cambiará el valor (elemento neutral de multiplicación), esto es esencialmente algo asítoNumber(..)
ya que el tipo final estará determinado por lo que se necesita para convertir la cadena "10" -> (int) 10; "10.1" -> (flotante) 10.1;Para evitar problemas intente
intval($var)
. Algunos ejemplos:fuente
12.7896
?(int)$my_str
no funcionaría, ya que estaba tratando específicamente con me gusta de cadenas01
y013
que quiero interpretar como base 10 ... Entonces, quería una forma de proporcionar explícitamente la base.En cualquier lenguaje (tipeado) siempre puede convertir una cadena a un número agregando un cero.
Sin embargo, tiene muy poco sentido en esto, ya que PHP lo hará automáticamente al momento de usar esta variable, y de todos modos se convertirá en una cadena al momento de la salida.
Tenga en cuenta que es posible que desee mantener los números punteados como cadenas, porque después de emitir para flotar puede cambiar de forma impredecible, debido a la naturaleza de los números flotantes.
fuente
typeof('123'+0)
da'string'
, porque'123'+0
da'1230'
.0+'123'
para obtener123
Puedes usar:
O puedes usar:
fuente
is_float
, y si eso pasa, luego eche a con en(float)
lugar de(int)
.Si quieres obtener un float para
$value = '0.4'
, pero int para$value = '4'
, puedes escribir:Está un poco sucio, pero funciona.
fuente
strpos($val, '.') === false ? intval($val) : floatval($val);
localeconv()['decimal_point']
lugar de'.'
. Una ventaja de lastrpos
solución es que es casi 2 veces más rápido que lanzar dos veces.2.1e2
, tiene punto decimal, pero el número resultante es entero+
operador de identidad:,var_dump(+'0.4', +'4')
le da un flotante y un int. php.net/manual/en/language.operators.arithmetic.php¡Siempre puedes agregarle cero!
fuente
A non well formed numeric value encountered
. ¿alguna idea?En lugar de tener que elegir si desea convertir el
string
aint
ofloat
, simplemente puede añadir una0
a ella, y PHP convertirá automáticamente el resultado a un tipo numérico.fuente
En PHP puedes usar
intval(string) or floatval(string)
funciones para convertir cadenas en números.fuente
Sí, hay un método similar en PHP, pero es tan poco conocido que rara vez lo escuchará. Es un operador aritmético llamado " identidad ", como se describe aquí:
Operadores Aritméticos
Para convertir una cadena numérica en un número, haga lo siguiente:
fuente
is_numeric
, por lo que tener un lugar para poner el código en cadenas de mango que no se puede convertir correctamente.)Solo una pequeña nota a las respuestas que puede ser útil y más segura en algunos casos. Es posible que desee verificar si la cadena realmente contiene un valor numérico válido primero y solo luego convertirlo a un tipo numérico (por ejemplo, si tiene que manipular los datos que provienen de una base de datos que convierte ints en cadenas). Puede usar
is_numeric()
y luegofloatval()
:fuente
Aquí está la función que logra lo que está buscando. Primero verificamos si el valor puede entenderse como un número, si es así lo convertimos en un int y un flotante. Si int y float son iguales (p. Ej., 5 == 5.0) entonces devolvemos el valor int. Si int y float no son lo mismo (por ejemplo, 5! = 5.3), entonces asumimos que necesita la precisión del float y devolver ese valor. Si el valor no es numérico, lanzamos una advertencia y devolvemos nulo.
fuente
Descubrí que en JavaScript una manera simple 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 multiplicación matemática
Basado en lo que he visto aquí con respecto a que PHP está dispuesto a interpretar automáticamente una cadena que contiene dígitos como un número (y los comentarios sobre la suma, ya que en PHP el "+" es puramente para la suma matemática), este truco de multiplicación funciona bien para PHP, también.
Lo he probado y funciona ... Aunque dependiendo de cómo adquirió la cadena, es posible que desee aplicarle la función trim (), antes de multiplicar por 1.
fuente
Aquí hay una función que escribí para simplificar las cosas para mí:
También devuelve versiones abreviadas de boolean, integer, double y real.
El tipo de llamada con parseNumeric establecido en verdadero convertirá cadenas numéricas antes de verificar el tipo.
Así:
tipo ("5", verdadero) devolverá int
tipo ("3.7", verdadero) devolverá flotante
type ("500") devolverá una cadena
Solo tenga cuidado ya que este es un tipo de método de verificación falsa y su variable real seguirá siendo una cadena. Necesitará convertir la variable real al tipo correcto si es necesario. Solo lo necesitaba para verificar si la base de datos debería cargar una identificación o alias de elemento, 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:
fuente
Además de la respuesta de Boykodev, sugiero esto:
fuente
$id_cron = (string)date('YmdHi'); $target_id_cron = $id_cron - 1;
lugar de $ target_id_cron = (int) $ id_cron - 1;A non well formed numeric value encountered
cuando quiero cambiar la cadena para flotar$num = '12,24' * 1
. ¿Cualquier sugerencia?Puede usar esto para convertir una cadena a un int en PHP .
fuente
Simplemente puedes escribir así:
fuente
Solo multiplique el número por 1 para que la cadena se convierta en número de tipo.
fuente
Puedes usar:
Pero la mejor solución es usar:
O
fuente
Puede cambiar el tipo de datos de la siguiente manera
Por razones históricas, se devuelve "doble" en caso de flotación.
Documentación PHP
fuente
Todas las sugerencias pierden el tipo numérico.
Esto me parece una mejor práctica:
fuente
PHP lo hará por ti dentro de los límites
fuente
Hay una manera:
Usar
is_*
no funcionará, ya quevariable
es un:string
.Usando la combinación de
json_encode()
y luegojson_decode()
se convierte a su forma "verdadera". Si es cierto,string
entonces saldría mal.Saldrá:
string(2) "Me" int(0) float(0)
fuente
Recibí la pregunta "digamos que estaba escribiendo la función incorporada para convertir un número entero en una cadena en PHP, ¿cómo escribiría esa función" en una entrevista de programación. Aquí hay una solución.
fuente
He estado leyendo las respuestas y no vi a nadie mencionar la mayor advertencia en la conversión de números de PHP.
La respuesta más votada sugiere hacer lo siguiente:
Eso es brillante. PHP hace casting directo. Pero, ¿y si hiciéramos lo siguiente?
¿PHP considera válidas tales conversiones?
Aparentemente si .
PHP lee la cadena hasta que encuentra el primer carácter no numérico para el tipo requerido. Lo que significa que para los enteros, los caracteres numéricos son [0-9]. Como resultado, se lee
3
, ya que está en el rango de caracteres [0-9], continúa leyendo. Lee.
y se detiene allí ya que no está en el rango [0-9].Lo mismo sucedería si lanzaras para flotar o duplicar. PHP leería
3
, luego.
, luego1
, luego4
, y se detendríai
ya que no es un carácter numérico flotante válido.Como resultado, se
"million" >= 1000000
evalúa como falso, pero se"1000000million" >= 1000000
evalúa comotrue
.Ver también:
https://www.php.net/manual/en/language.operators.comparison.php cómo se realizan las conversiones al comparar
https://www.php.net/manual/en/language.types.string.php#language.types.string.conversion cómo las cadenas se convierten en números respectivos
fuente
Si no sabe de antemano si tiene un flotante o un entero,
y si la cadena puede contener caracteres especiales (como espacio, €, etc.),
y si puede contener más de 1 punto o coma,
puede usar esto función:
fuente
Enfoque diferente:
json_encode($your_array, JSON_NUMERIC_CHECK);
opcionalmente decodificar de nuevofuente