Я пытаюсь это сделать, но я не могу хранить большую ценность
$var = rand(100000000000000,999999999999999); echo $var; // prints a 9 digit value(largest possible)
Как получить желаемое значение?
PHP ints обычно составляет 32 бита. Другие пакеты обеспечивают более высокую точность ints: http://php.net/manual/en/language.types.integer.php
Из руководства :
Размер целого зависит от платформы, хотя максимальное значение около двух миллиардов – это обычное значение (это 32 бита). Обычно 64-битные платформы имеют максимальное значение около 9E18. PHP не поддерживает целые числа без знака. Целочисленный размер может быть определен с использованием константы PHP_INT_SIZE и максимального значения с использованием константы PHP_INT_MAX с PHP 4.4.0 и PHP 5.0.5.
…
Если PHP встречает число за пределами целочисленного типа, оно будет интерпретироваться как float. Кроме того, операция, которая приводит к числу за пределами целочисленного типа, вместо этого возвращает float.
BC Math и GMP – это (только?) Способ манипулировать этим ограничением.
Если вам нужно работать с очень большими числами, я нашел успех в BC Math. Вот ссылка на все, что вам нужно знать:
Если вы хотите сгенерировать номер и манипулировать как родной тип, вы не можете с большинством установок PHP (или у вас есть 32 или 64 бит int
s и ничего больше), как уже указывали другие ответы. Однако, если вы просто генерируете число и хотите передать его вокруг возможного трюка, нужно просто конкатенировать строки:
$var = rand(0,PHP_INT_MAX).str_pad(rand(0, 999999999), 9, 0, STR_PAD_LEFT); echo $var;
На платформе, в которой PHP использует 32-битное целое число, это позволяет получить почти случайное целое число (в виде строки), которое превышает 32 бита (> 10 знаков после запятой). Конечно, в этой конструкции есть предвзятость, что означает, что вы не будете покрывать все числа с той же вероятностью. Пределы вызовов rand()
подчиняются нормальным десятичным правилам, поэтому их просто настроить верхнюю границу нужного числа.
Если все, что вы делаете, это сохранение / передача / показ этого значения, строка будет в порядке. Равенство и большее / меньшее, чем тесты, также будут работать. Просто не делайте математики с этим.