variable una numerico float convertir cast array php int unsigned-long-long-int

una - Usando long int en PHP



int() php (4)

Estoy probando esto, pero no puedo almacenar un gran valor

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

¿Cómo obtener un valor deseado?


Del manual :

El tamaño de un entero depende de la plataforma, aunque un valor máximo de aproximadamente dos mil millones es el valor habitual (es decir, 32 bits firmados). Las plataformas de 64 bits generalmente tienen un valor máximo de aproximadamente 9E18. PHP no admite enteros sin signo. El tamaño entero se puede determinar usando la constante PHP_INT_SIZE, y el valor máximo usando la constante PHP_INT_MAX desde PHP 4.4.0 y PHP 5.0.5.

...

Si PHP encuentra un número más allá de los límites del tipo entero, se interpretará como un flotante. Además, una operación que da como resultado un número más allá de los límites del tipo entero devolverá una flotación en su lugar.

BC Math y GMP son la (¿única?) Forma de manipular esta limitación.




Si desea generar el número y manipularlo como un tipo nativo, no puede hacerlo con la mayoría de las instalaciones de PHP (ya sea que tenga 32 o 64 bit int s y nada más), como ya han indicado las otras respuestas. Sin embargo, si solo está generando un número y quiere pasarlo, un posible truco es concatenar cadenas:

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

En una plataforma en la que PHP usa un entero de 32 bits, esto le permite obtener un entero casi aleatorio (como una cadena) que es más grande que 32 bits (> 10 lugares decimales). Por supuesto, hay un sesgo en esta construcción, lo que significa que no cubrirá todos los números con la misma probabilidad. Los límites de las llamadas rand() obedecen a las reglas decimales normales por lo que es fácil ajustar el límite superior del número que desea.

Si todo lo que hace es almacenar / transmitir / mostrar este valor, la cadena estará bien. Igualdad y pruebas mayores / menores también funcionarán. Simplemente no hagas ninguna matemática con eso.