Inteiros
Um inteiro é um número do conjunto Z = {..., -2, -1, 0, 1, 2, ...}.
Veja também: Inteiros de tamanho arbitrário / GMP, Números de ponto flutuante e Precisão arbitrária / BCMath.
Sintaxe
Inteiros podem ser especificados em notação decimal (base 10), hexadecimal (base 16) ou octal (base 8), opcionalmente precedido de sinal (- ou +).
Para usar a notação octal, você precisa preceder o número com um 0 (zero). Para utilizar a notação hexadecimal, preceda número com 0x.
Example#1 Literais inteiras
<?php
$a = 1234; // número decimal
$a = -123; // um número negativo
$a = 0123; // número octal (equivalente a 83 em decimal)
$a = 0x1A; // número hexadecimal (equivalente a 26 em decimal)
?>
decimal : [1-9][0-9]* | 0 hexadecimal : 0[xX][0-9a-fA-F]+ octal : 0[0-7]+ integer : [+-]?decimal | [+-]?hexadecimal | [+-]?octal
Se um dÃgito inválido é passado para inteiro octal (i.e. 8 ou 9), o resto do número é ignorado.
Example#2 Octal weirdness
<?php
var_dump(01090); // 010 octal = 8 decimal
?>
Overflow de inteiros
Se você especifica um número além dos limites do tipo inteiro, ele será interpretado como um ponto flutuante. Assim, se você realizar uma operação que resulte em um número além dos limites do tipo inteiro, um ponto flutuante será retornado também.
<?php
$ numero_grande = 2147483647;
var_dump($numero_grande);
// saida: int(2147483647)
$numero_grande = 2147483648;
var_dump($numero_grande);
// saida: float(2147483648)
// it's true also for hexadecimal specified integers between 2^31 and 2^32-1:
var_dump( 0xffffffff );
// output: float(4294967295)
// this doesn't go for hexadecimal specified integers above 2^32-1:
var_dump( 0x100000000 );
// output: int(2147483647)
$milhao = 1000000;
$numero_grande = 50000 * $milhao;
var_dump($numero_grande);
// saida: float(50000000000)
?>
Infelizmente, há um bug no PHP que faz que ele nem sempre trabalhe corretamente quando há números negativos envolvidos. Por exemplo, quando você faz -50000 * $milhao, o resultado será -429496728. Entretanto, quando ambos os operadores são positivos, isso não ocorre.
Isto foi resolvido no PHP 4.1.0.
Não há operador de divisão inteira no PHP. 1/2 retorna o ponto flutuante 0.5. Você pode moldar (cast) o valor para inteiro para sempre truncar o número, ou você pode usar a função round().
<?php
var_dump(25/7); // float(3.5714285714286)
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7)); // float(4)
?>
Convertendo para inteiro
Para converter explicitamente um valor para inteiro, utilize-se dos modificadores (int) ou (integer). Entretanto, na maioria dos casos, você não precisa utilizar o modificador, desde que qualquer valor será automaticamente convertido se um operador, função ou estrutura de controle requerer um argumento inteiro. Você também pode converter o valor de um inteiro com a função intval().
Veja também Manipulação de tipos.
de booleanos
FALSE será retornado como 0 (zero), e TRUE como 1 (um).
De números de ponto flutuante
Quando convertendo de números de ponto flutuante para inteiros, o número será truncado.
Se o número convertido estiver além dos limites de um inteiro (usualmente +/- 2.15e+9 = 2^31), o resultado é indefinido, mesmo porque o ponto flutuante não tem a mesma precisão para fornecer um resultado inteiro exato. Não se preocupe, pois nenhum aviso será emitido neste caso!
Nunca modifique uma fração desconhecida para inteiro, porque isto pode fornecer resultados inesperados as vezes.
<?php
echo (int) ( (0.1+0.7) * 10 ); // imprime 7!
?>
De strings
De outros tipos
O comportamento da conversão de um inteiro é indefinido de outros tipos. Atualmente, o comportamento é o mesmo como se primeiro o valor fosse convertido para booleano. Entretanto, não confie neste comportamento, pois ele pode mudar sem aviso.