Минимальное целое число в PHP 7

В интерактивном режиме на PHP 7 (64-битная Ubuntu),

php > echo true;
1
php > echo false; # no output for false
php > echo PHP_INT_MIN == -9223372036854775808;
1
php > echo is_int(PHP_INT_MIN);
1
php > echo is_int(-9223372036854775808);

Почему последняя строка не выводит 1?

1

Решение

var_dump() твой друг.

var_dump(
PHP_INT_MIN,
is_int(PHP_INT_MIN),
-9223372036854775808,
is_int(-9223372036854775808)
);

/* Output:
int(-9223372036854775808)
bool(true)
float(-9.2233720368548E+18)
bool(false)
*/
3

Другие решения

Так как is_int :

Перат подписывается, не подписывается, и ограничен размером слова среды, в которой работает php.

и поэтому -9223372036854775808 это меньше, чем привязано системное слово

2

Сначала PHP анализирует ваше целочисленное значение как число с плавающей точкой из-за целочисленного переполнения. Затем он использует is_int (), чтобы определить, является ли то, что проанализировал PHP, целое число. Смотрите пример № 3 для 64-битных систем.

Обратите внимание, что is_int () также работает с целыми числами без знака.
Используя 32-битный PHP 7:

echo PHP_INT_MIN;                    // -2147483648
echo var_dump(is_int(-2147483648));  // bool(false)
echo var_dump(is_int(-2147483647));  // bool(true)

Чтобы убедиться, что PHP_INT_MIN отключен, попробуйте это на своем 64-битном PHP 7:

echo var_dump(is_int(-9223372036854775807));  // bool(true)?

Если вам нужна большая целочисленная точность, вы можете использовать Расширение GMP.

2
По вопросам рекламы [email protected]