Short story, here's my code:
var_dump($recentGame->createDate);
var_dump((int) $recentGame->createDate);
Is producing the following output:
float 1416772859827
int -566347853
Why is the output of the typecasted output not this:
int 1416772859827
Quoting from the PHP docs:
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). 64-bit platforms usually have a maximum value of about 9E18, except for Windows, which is always 32 bit. PHP does not support unsigned integers. Integer size can be determined using the constant PHP_INT_SIZE, and maximum value using the constant PHP_INT_MAX since PHP 4.4.0 and PHP 5.0.5.
Related
Ignoring the special libraries that allow you to work with very big numbers, what's the largest int value you can store in PHP?
From the PHP manual:
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. Integer size can be
determined using the constant
PHP_INT_SIZE, and maximum value using
the constant PHP_INT_MAX since PHP
4.4.0 and PHP 5.0.5.
64-bit platforms usually have a maximum value of about 9E18, except on Windows prior to PHP 7, where it was always 32 bit.
32-bit builds of PHP:
Integers can be from -2,147,483,648 to 2,147,483,647 (~ ± 2 billion)
64-bit builds of PHP:
Integers can be from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 (~ ± 9 quintillion)
Numbers are inclusive.
Note: some 64-bit builds once used 32-bit integers, particularly older Windows builds of PHP
Values outside of these ranges are represented by floating point values, as are non-integer values within these ranges. The interpreter will automatically determine when this switch to floating point needs to happen based on whether the result value of a calculation can't be represented as an integer.
PHP has no support for "unsigned" integers as such, limiting the maximum value of all integers to the range of a "signed" integer.
The size of PHP ints is platform dependent:
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. Integer size can be
determined using the constant
PHP_INT_SIZE, and maximum value using
the constant PHP_INT_MAX since PHP
4.4.0 and PHP 5.0.5.
PHP 6 adds "longs" (64 bit ints).
(a little bit late, but could be useful)
Only trust PHP_INT_MAX and PHP_INT_SIZE, this value vary on your arch (32/64 bits) and your OS...
Any other "guess" or "hint" can be false.
Ah I found it: 232 - 1 (2147483647)
http://au2.php.net/int
Integer overflow
If PHP encounters a number beyond the bounds of the integer type, it will be interpreted as a float instead. Also, an operation which results in a number beyond the bounds of the integer type will return a float instead.
<?php
$large_number = 2147483647;
var_dump($large_number);
// output: int(2147483647)
$large_number = 2147483648;
var_dump($large_number);
// output: float(2147483648)
It depends on your OS, but 2147483647 is the usual value, according to the manual.
It subjects to architecture of the server on which PHP runs. For 64-bit,
print PHP_INT_MIN . ", ” . PHP_INT_MAX; yields -9223372036854775808, 9223372036854775807
Although PHP_INT_* constants exist for a very long time, the same MIN / MAX values could be found programmatically by left shifting until reaching the negative number:
$x = 1;
while ($x > 0 && $x <<= 1);
echo "MIN: ", $x;
echo PHP_EOL;
echo "MAX: ", ~$x;
Ignoring the special libraries that allow you to work with very big numbers, what's the largest int value you can store in PHP?
From the PHP manual:
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. Integer size can be
determined using the constant
PHP_INT_SIZE, and maximum value using
the constant PHP_INT_MAX since PHP
4.4.0 and PHP 5.0.5.
64-bit platforms usually have a maximum value of about 9E18, except on Windows prior to PHP 7, where it was always 32 bit.
32-bit builds of PHP:
Integers can be from -2,147,483,648 to 2,147,483,647 (~ ± 2 billion)
64-bit builds of PHP:
Integers can be from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 (~ ± 9 quintillion)
Numbers are inclusive.
Note: some 64-bit builds once used 32-bit integers, particularly older Windows builds of PHP
Values outside of these ranges are represented by floating point values, as are non-integer values within these ranges. The interpreter will automatically determine when this switch to floating point needs to happen based on whether the result value of a calculation can't be represented as an integer.
PHP has no support for "unsigned" integers as such, limiting the maximum value of all integers to the range of a "signed" integer.
The size of PHP ints is platform dependent:
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. Integer size can be
determined using the constant
PHP_INT_SIZE, and maximum value using
the constant PHP_INT_MAX since PHP
4.4.0 and PHP 5.0.5.
PHP 6 adds "longs" (64 bit ints).
(a little bit late, but could be useful)
Only trust PHP_INT_MAX and PHP_INT_SIZE, this value vary on your arch (32/64 bits) and your OS...
Any other "guess" or "hint" can be false.
Ah I found it: 232 - 1 (2147483647)
http://au2.php.net/int
Integer overflow
If PHP encounters a number beyond the bounds of the integer type, it will be interpreted as a float instead. Also, an operation which results in a number beyond the bounds of the integer type will return a float instead.
<?php
$large_number = 2147483647;
var_dump($large_number);
// output: int(2147483647)
$large_number = 2147483648;
var_dump($large_number);
// output: float(2147483648)
It depends on your OS, but 2147483647 is the usual value, according to the manual.
It subjects to architecture of the server on which PHP runs. For 64-bit,
print PHP_INT_MIN . ", ” . PHP_INT_MAX; yields -9223372036854775808, 9223372036854775807
Although PHP_INT_* constants exist for a very long time, the same MIN / MAX values could be found programmatically by left shifting until reaching the negative number:
$x = 1;
while ($x > 0 && $x <<= 1);
echo "MIN: ", $x;
echo PHP_EOL;
echo "MAX: ", ~$x;
Is there a way to actually check before or after casting from string to int if there was precision loss and throw an exception?
$id = "21321312412435453453453454"
$numId = (int) $id;
This should work for you:
(Just used php predefined constants to compare it)
$id = "21321312412435453453453454";
if($id > PHP_INT_MAX)
echo "too big";
else
echo "okay";
Output:
too big
EDIT:
For negative you just can define the constant like this:
define('PHP_INT_MIN', ~PHP_INT_MAX);
You can read about PHP_INT_MAX even in the manual: http://php.net/manual/en/language.types.integer.php
And a quote from there:
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). 64-bit platforms usually have a maximum value of about 9E18, except for Windows, which is always 32 bit. PHP does not support unsigned integers. Integer size can be determined using the constant PHP_INT_SIZE, and maximum value using the constant PHP_INT_MAX since PHP 4.4.0 and PHP 5.0.5.
Try casting it back to a string and compare the two.
I am unable to get the exact value of $data, which I converted into integer from this,
<?php
$data = '9999999999';
echo $datan = (int) $data;
?>
How can I get the exact value of $data from $datan?
From the PHP docs:
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). 64-bit platforms usually have a maximum value of about 9E18. PHP does not support unsigned integers. Integer size can be determined using the constant PHP_INT_SIZE, and maximum value using the constant PHP_INT_MAX since PHP 4.4.0 and PHP 5.0.5.
http://php.net/manual/en/language.types.integer.php
Check the PHP_INT_MAX of your system.
If you get 2147483647, it means PHP_INT_MAX is 2147483647 in your system(32 bits signed).
Check you PHP_INT_MAX. it may be lower than 9999999999
Ignoring the special libraries that allow you to work with very big numbers, what's the largest int value you can store in PHP?
From the PHP manual:
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. Integer size can be
determined using the constant
PHP_INT_SIZE, and maximum value using
the constant PHP_INT_MAX since PHP
4.4.0 and PHP 5.0.5.
64-bit platforms usually have a maximum value of about 9E18, except on Windows prior to PHP 7, where it was always 32 bit.
32-bit builds of PHP:
Integers can be from -2,147,483,648 to 2,147,483,647 (~ ± 2 billion)
64-bit builds of PHP:
Integers can be from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 (~ ± 9 quintillion)
Numbers are inclusive.
Note: some 64-bit builds once used 32-bit integers, particularly older Windows builds of PHP
Values outside of these ranges are represented by floating point values, as are non-integer values within these ranges. The interpreter will automatically determine when this switch to floating point needs to happen based on whether the result value of a calculation can't be represented as an integer.
PHP has no support for "unsigned" integers as such, limiting the maximum value of all integers to the range of a "signed" integer.
The size of PHP ints is platform dependent:
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. Integer size can be
determined using the constant
PHP_INT_SIZE, and maximum value using
the constant PHP_INT_MAX since PHP
4.4.0 and PHP 5.0.5.
PHP 6 adds "longs" (64 bit ints).
(a little bit late, but could be useful)
Only trust PHP_INT_MAX and PHP_INT_SIZE, this value vary on your arch (32/64 bits) and your OS...
Any other "guess" or "hint" can be false.
Ah I found it: 232 - 1 (2147483647)
http://au2.php.net/int
Integer overflow
If PHP encounters a number beyond the bounds of the integer type, it will be interpreted as a float instead. Also, an operation which results in a number beyond the bounds of the integer type will return a float instead.
<?php
$large_number = 2147483647;
var_dump($large_number);
// output: int(2147483647)
$large_number = 2147483648;
var_dump($large_number);
// output: float(2147483648)
It depends on your OS, but 2147483647 is the usual value, according to the manual.
It subjects to architecture of the server on which PHP runs. For 64-bit,
print PHP_INT_MIN . ", ” . PHP_INT_MAX; yields -9223372036854775808, 9223372036854775807
Although PHP_INT_* constants exist for a very long time, the same MIN / MAX values could be found programmatically by left shifting until reaching the negative number:
$x = 1;
while ($x > 0 && $x <<= 1);
echo "MIN: ", $x;
echo PHP_EOL;
echo "MAX: ", ~$x;