Ali*_*xel 15 php random gmp bcmath
我正在寻找一种用PHP 生成一个大随机数的方法,例如:
mt_rand($lower, $upper);
Run Code Online (Sandbox Code Playgroud)
我看到的距离越近gmp_random()但它不允许我指定下边界和上边界只有每个肢体的位数(我不知道它是什么).
编辑:Axsuuls答案似乎非常接近我想要的,非常类似于gmp_random,但在一个场景中似乎只有一个缺陷.
假设我不想在两者之间得到一个随机数:
和:
因此,如果函数名为BigRandomNumber():
BigRandomNumber($length = 31);
Run Code Online (Sandbox Code Playgroud)
这很容易返回超出指定边界的9999999999999999999999999999999.
如何使用最小/最大边界而不是长度值?
BigRandomNumber('1225468798745475454898787465154', '1225468798745475454898787465200');
Run Code Online (Sandbox Code Playgroud)
这应该返回1225468798745475454898787465 [154 .. 200]之间的随机数.
编辑:上面的帖子被删除了,这里是:
function compare($number1, $operator, $number2) {
$x = bccomp($number1, $number2);
switch($operator) {
case '<':
return -1===$x;
case '>':
return 1===$x;
case '=':
case '==':
case '===':
return 0===$x;
case '!=':
case '!==':
case '<>':
return 0!==$x;
}
}
Run Code Online (Sandbox Code Playgroud)
Rob*_*t K 16
请尝试以下方法:
function BigRandomNumber($min, $max) {
$difference = bcadd(bcsub($max,$min),1);
$rand_percent = bcdiv(mt_rand(), mt_getrandmax(), 8); // 0 - 1.0
return bcadd($min, bcmul($difference, $rand_percent, 8), 0);
}
Run Code Online (Sandbox Code Playgroud)
数学如下:将最小值和最大值之间的差值乘以随机百分比,并加到最小值(舍入为int).