Пожалуйста, может кто-нибудь объяснить различия в результатах ниже
echo intval(1e10);
Выход 1410065408
echo 1e10;
Выход 10000000000
Максимальное значение имеет целое число со знаком. В 32-битных системах это 2 ^ 16 или 2147483647. Когда intval
число больше, оно будет переполняться. Вы также можете оценить значение:
php > echo 1e10 % (2147483647); 1410065408
Из руководства PHP:
Максимальное значение зависит от системы. 32-битные системы имеют максимальный знаковый целочисленный диапазон от -2147483648 до 2147483647. Так, например, в такой системе intval ('1000000000000') вернет 2147483647. Максимальное знаковое целочисленное значение для 64-битных систем – 9223372036854775807.
intval усекает число
Код:
<?php echo 'intval: ' . intval( 1e10 ) . PHP_EOL; echo '1e10: ' . 1e10 . PHP_EOL;
Работает от cli
Вывод:
intval: 10000000000 1e10: 10000000000
Ubuntu 12.10 x64 php5.4
Другими словами, вы используете машину x86 (32 бит).