Использование long int в PHP
Я пытаюсь это сделать, но не могу сохранить большое значение
$var = rand(100000000000000,999999999999999);
echo $var; // prints a 9 digit value(largest possible)
Как получить желаемое значение ?
4 ответов
PHP ints обычно 32 бита. Другие пакеты обеспечивают более высокоточные ints:http://php.net/manual/en/language.types.integer.php
с руководство:
размер integer зависит от платформы, хотя максимальное значение около двух миллиардов привычное значение (это 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()
вызовы подчиняются нормальным десятичным правилам, поэтому его просто настроить верхнюю границу числа, которое вы хотите.
Если все, что вы делаете, это сохранение/передача/отображение этого значения, строка будет в порядке. Равенство и больше / меньше тестов также будут работать. Просто не считай с этим.