An integer is a number of the set Z =
{..., -2, -1, 0, 1, 2, ...}.
See also: Arbitrary precision integers and Floating point numbers
Integers can be specified in decimal (10-based), hexadecimal (16-based) or octal (8-based)
notation, optionally preceded by a sign (- or +).
If you use the octal notation, you must precede the number with a 0 (zero), to
use hexadecimal notation precede the number with 0x.
|
Example 6-1. Integer literals
$a = 1234; # decimal number
$a = -123; # a negative number
$a = 0123; # octal number (equivalent to 83 decimal)
$a = 0x1A; # hexadecimal number (equivalent to 26 decimal)
|
|
The size of an integer is platform-dependent, although a maximum value of about two billion is the
usual value (that's 32 bits signed). PHP does not support unsigned integers.
If you specify a number beyond the bounds of the
integer type, it will be interpreted as a
float instead. Also, if you perform an operation that results in a number beyond the bounds
of the integer type, a float will be returned instead.
$large_number = 2147483647;
var_dump($large_number);
// output: int(2147483647)
$large_number = 2147483648;
var_dump($large_number);
// output: float(2147483648)
// this goes also for hexadecimal specified integers:
var_dump( 0x80000000 );
// output: float(2147483648)
$million = 1000000;
$large_number = 50000 * $million;
var_dump($large_number);
// output: float(50000000000)
|
| Warning |
|
Unfortunately, there was a bug in PHP so that this does not always work correctly when
there are negative numbers involved. For example: when you do -50000 * $million, the
result will be -429496728. However, when both operands are positive there is no
problem.
This is solved in PHP 4.1.0.
|
There is no integer division operator in PHP. 1/2 yields the float 0.5.
var_dump( 25/7 );
// output: float(3.5714285714286)
|
To explicitly convert a value to integer,
use either the (int) or the (integer) cast. However, in most cases you do not
need to use the cast, since a value will be automatically converted if an operator, function or
control structure requires a integer argument.
See also type-juggling.
FALSE will yield 0 (zero), and TRUE will yield
1 (one).
When converting from float to integer, the number will be rounded towards
zero.
If the float is beyond the boundaries of integer (usually +/- 2.15e+9 =
2^31), the result is undefined, since the float hasn't got enough precision to give an exact
integer result. No warning, not even a notice will be issued in this case!
| Warning |
|
Never cast an unknown fraction to
integer, as this can sometimes lead to unexpected results.
|
See String
conversion
| Caution |
|
Behaviour of converting to integer is undefined for other types. Currently, the behaviour
is the same as if the value was first converted to boolean. However, do
not relay on this behaviour, as it can change without notice.
|
|