Please can some one explain the result differences below
echo intval(1e10);
Output 1410065408
echo 1e10;
Output 10000000000
A signed integer has a maximum value. On 32-bit systems, that's 2^16 or 2147483647. When intval
-ing a number that's larger, it will overflow. The value you found can also calculated:
php > echo 1e10 % (2147483647);
1410065408
From PHP Manual:
The maximum value depends on the system. 32 bit systems have a maximum signed integer range of -2147483648 to 2147483647. So for example on such a system, intval('1000000000000') will return 2147483647. The maximum signed integer value for 64 bit systems is 9223372036854775807.
intval will truncate the number
Code:
<?php
echo 'intval: ' . intval( 1e10 ) . PHP_EOL;
echo '1e10: ' . 1e10 . PHP_EOL;
Runs from cli
Output:
intval: 10000000000
1e10: 10000000000
Ubuntu 12.10 x64 php5.4
In other words, you are using a x86 (32bit) machine.