Я пытаюсь это сделать, но я не могу хранить большое значение
$var = rand(100000000000000,999999999999999);
echo $var; // prints a 9 digit value(largest possible)
Как получить желаемое значение?
Я пытаюсь это сделать, но я не могу хранить большое значение
$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
Из 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 - это ( только?), чтобы управлять этим ограничением.
Если вам нужно работать с очень большими числами, я нашел успех в BC Math. Вот ссылка на все, что вам нужно знать:
Если вы хотите сгенерировать номер и манипулировать как родной тип, вы не можете с большинством установок 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()
подчиняются нормальным десятичным правилам, поэтому их можно просто скорректировать верхнюю границу числа, которое вы хотите.
Если все, что вы делаете, это сохранение/передача/показ этого значения, строка будет прекрасной. Равенство и большее/меньшее, чем тесты, также будут работать. Просто не делайте математики с этим.