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.
<?php
$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)
?>
$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. You can cast the value to an integer
to always round it downwards, or you can use the round()
function.
<?php
var_dump(25/7); // float(3.5714285714286)
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7)); // float(4)
?>
var_dump(25/7); // float(3.5714285714286)
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7)); // float(4)
?>
Converting to integer
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 an integer argument. You
can also convert a value to integer with the function intval().
See also type-juggling. From booleans
FALSE will yield 0 (zero), and TRUE will yield 1 (one).From floating point numbers
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.
<?php
echo (int) ( (0.1+0.7) * 10 ); // echoes 7!
?>
See for more information the warning
about float-precision. echo (int) ( (0.1+0.7) * 10 ); // echoes 7!
?>
From strings
See String conversion to numbersFrom other types
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
rely on this behaviour, as it can change without notice.
No comments:
Post a Comment