Использование long int в PHP

Я пытаюсь это сделать, но я не могу хранить большое значение

$var = rand(100000000000000,999999999999999);
echo $var; // prints a 9 digit value(largest possible)

Как получить желаемое значение?

Ответ 2

Из manual:

Размер целого числа зависит от платформы, хотя максимальное значение около двух миллиардов - это обычное значение (это 32 бита). Обычно 64-битные платформы имеют максимальное значение около 9E18. PHP не поддерживает целые числа без знака. Integer размер может быть определен с использованием константы PHP_INT_SIZE и максимального значения с использованием константы PHP_INT_MAX с PHP 4.4.0 и PHP 5.0.5.

...

Если PHP встречает число за пределами целочисленного типа, оно будет интерпретироваться как float. Кроме того, операция, которая приводит к числу за пределами целочисленного типа, вместо этого возвращает float.

BC Math и GMP - это ( только?), чтобы управлять этим ограничением.

Ответ 3

Если вам нужно работать с очень большими числами, я нашел успех в BC Math. Вот ссылка на все, что вам нужно знать:

http://php.net/manual/en/book.bc.php

Ответ 4

Если вы хотите сгенерировать номер и манипулировать как родной тип, вы не можете с большинством установок PHP (либо у вас 32 или 64 бит int, ни больше ничего), как уже сказали другие ответы. Однако, если вы просто генерируете число и хотите передать его вокруг возможного трюка, нужно просто конкатенировать строки:

$var = rand(0,PHP_INT_MAX).str_pad(rand(0, 999999999), 9, 0, STR_PAD_LEFT);
echo $var;

На платформе, в которой PHP использует 32-битное целое число, это позволяет получить почти случайное целое число (в виде строки), которое превышает 32 бита ( > 10 знаков после запятой). Конечно, в этой конструкции есть предвзятость, что означает, что вы не будете покрывать все числа с той же вероятностью. Пределы вызовов rand() подчиняются нормальным десятичным правилам, поэтому их можно просто скорректировать верхнюю границу числа, которое вы хотите.

Если все, что вы делаете, это сохранение/передача/показ этого значения, строка будет прекрасной. Равенство и большее/меньшее, чем тесты, также будут работать. Просто не делайте математики с этим.