2011-06-15 15 views
7

¿Por qué los resultados siguientes en 34? Parece que no tiene nada que ver con los números octales.variable int con cero inicial?

intval(042); 
+0

documentos PHP para los números octales, http://php.net/manual/en /language.types.integer.php. Los octales comienzan con 0. –

+0

Gracias, lo obtuve, lo califiqué => 4 * 8 + 2 – RoboTamer

+0

Un 0 inicial hará que PHP trate el valor como octal. – GordonM

Respuesta

15

pero un 0 inicial indica octal en muchos idiomas, como es el caso aquí.

+0

+1 para la primera respuesta correcta que también explica ** why **. –

0

Es simplemente cómo se define la función. El cero inicial es una instrucción que lo analiza como un número octal, de forma similar a cómo 0x como un prefijo significa hexadecimal. Ver the documentation for more information.

0

Tenga cuidado al pasar esta función un valor de cadena con un "0" inicial. Si le da "042", entonces lo tratará como BASE 8 - 9 y lo convertirá en valor decimal, que es por defecto base.

Por favor, vaya a través this

1

Se tiene que ver con los números octales, 042 se interpreta como el número octal 42 que es 4 * 8 + 2 = 34.

Tenga en cuenta que la interpretación octal ocurre cuando se analiza el número literal al cargar el script PHP. No tiene nada que ver con intval(), que no hace nada aquí porque el valor ya es entero.

interpretación Octal ocurre sólo con los literales numéricos, no cuando se lanza una cadena a un entero:

intval(042) // == 34 
intval('042') // == 42 
(int)'042' // == 42 
1

En PHP con un número que lleva un 0 como un número octal.

So 042 se lee como un número octal.

La función intval() la convierte en número decimal, que es 34.

lo que la salida del navegador es 34.

Cuestiones relacionadas