我遇到了一个问题,当我尝试使用mt_rand或rand(在更大的范围内)随机生成数字时,我根本没有得到任何结果。这曾经在我的服务器上工作正常,但现在似乎有问题,我不确定为什么。
<?php
echo 'Your number is: '.rand(0, 99999999999999999999);
?>
我在哪里将其更新为(使用9位数字):
<?php
echo 'Your number is: '.rand(0, 999999999);
?>
下面的示例将正常工作。我最近改变了我的服务器版本PHP 7.0。有没有办法增加最大数量或更好的方法来做到这一点?感谢。
答案 0 :(得分:2)
在32位和64位系统上,数字99999999999999999999
太大而无法在PHP 7中表示为整数,因此它变为浮点数。
但是,mt_rand()
需要两个整数。由于99999999999999999999
太大而不是整数,因此当您将其传递给函数PHP 7 throws an error, because it cannot be safely converted时。您没有为999999999
收到此错误,因为它小到足以成为整数。
无论如何,你当前的代码可能在PHP 5下没有你想要的那样:99999999999999999999
在64位系统上被静默转换为7766279631452241920
,而在32位上也是如此系统。因此,您无法获得全方位的随机数。您撰写了rand(0, 99999999999999999999)
,但实际上您已获得rand(0, 7766279631452241920)
。
如果您只想从最宽范围内获取随机数,请尝试以下方法:
<?php
echo 'Your number is: '.rand(0, PHP_INT_MAX);
?>
PHP_INT_MAX
是一个包含最大可能整数的常量(根据您是否在32位或64位上而不同)。因此,这样做总能为您提供该函数中最广泛的随机正数。
答案 1 :(得分:1)
要在php 7中运行代码,你必须进行类型转换
<?php
echo 'Your number is: '.rand(0,(int) 99999999999999999999);
?>
答案 2 :(得分:0)
Microtime每次都会随机产生。
function microtimeRand( $min, $max ) {
$microtimeInt = intval( microtime( true ) * 100 );
$microtimeInt = $microtimeInt % ($max - $min);
$microtimeInt += $min;
return $microtimeInt;
}