在PHP

2011-12-27 7 views
11
使用長整型

我想這一點,但我無法存儲大量的值在PHP

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

如何獲得所需的值?

回答

15

manual

的整數的大小是與平臺相關的,雖然約兩十億的最大值是通常的值(即32位有符號)。 64位平臺的最大值通常約爲9E18。 PHP不支持無符號整數。整數大小可以使用常量PHP_INT_SIZE確定,最大值使用自PHP 4.4.0和PHP 5.0.5以來的常量PHP_INT_MAX。

...

如果PHP遇到了一些超出了integer的範圍,將會被解釋爲float代替。此外,導致超出整數類型範圍的數字的操作將返回一個float。

BC MathGMP是操縱此限制的(唯一的)方法。

1

如果您想生成數字並作爲本機類型進行操作,那麼您不能使用大多數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()調用的限制服從正常的十進制規則,所以它很容易調整你想要的數字的上限。

如果你正在做的是存儲/傳輸/顯示這個值,那麼字符串就會很好。平等和更大/更少的測試也將奏效。只是不要用它做任何數學。