2011-12-27 15 views
11

ja to wypróbować, ale jestem w stanie przechowywać dużą wartośćKorzystanie long int w PHP

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

Jak uzyskać żądaną wartość?

Odpowiedz

15

Z manual:

Rozmiar liczb całkowitych jest zależne od platformy, choć maksymalna wartość około dwóch miliardów jest zwykle wartość (to jest podpisane 32 bity). Platformy 64-bitowe mają zwykle maksymalną wartość około 9E18. PHP nie obsługuje liczb całkowitych bez znaku. Wielkość całkowita może być określona przy użyciu stałej PHP_INT_SIZE, a maksymalna wartość przy użyciu stałej PHP_INT_MAX od PHP 4.4.0 i PHP 5.0.5.

...

Jeśli PHP napotka szereg poza granice tego typu całkowitego, zostanie zinterpretowane jako float. Ponadto operacja, która powoduje, że liczba poza granicami typu integer zwróci wartość zmiennoprzecinkową.

BC Math i GMP są (tylko?) Sposobem na manipulowanie tym ograniczeniem.

1

Jeśli chcesz wygenerować numer i manipulować nim jako rodzimym typem, nie możesz z większością instalacji PHP (masz 32 lub 64-bitowe int s i nic więcej), o czym już wspomniały inne odpowiedzi. Jednakże, jeśli jesteś po prostu generowania numer i chcesz przekazać ją wokół ewentualnego Sztuką jest tylko łączenia ciągów:

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

na platformie, w którym PHP wykorzystuje 32-bitową liczbę całkowitą, to pozwala uzyskać niemal losowa liczba całkowita (jako ciąg), która jest większa niż 32 bity (> 10 miejsc po przecinku). Oczywiście w tej konstrukcji występuje odchylenie, co oznacza, że ​​nie pokryjesz wszystkich liczb z takim samym prawdopodobieństwem. Ograniczenia wywołań rand() są zgodne z normalnymi zasadami dziesiętnymi, więc można łatwo dostosować górne ograniczenie żądanej liczby.

Jeśli wszystko, co robisz, to przechowywanie/przesyłanie/pokazywanie tej wartości, łańcuch będzie w porządku. Równie ważna będzie równość i większa/mniejsza niż testy. Po prostu nie rób z tym żadnej matematyki.