PHP中与JavaScript Math.random()函数等效的方法是什么?

9
我需要一个PHP函数,可以生成与javascript Math.random()相同种子的随机数。
MDN关于math.random()的说明:
随机数生成器的种子是从当前时间开始的,就像Java一样。
据我所试,PHP的rand()生成了类似以下的内容:
srand( time() ); // I use time as seed, like javascript does
echo rand();
Output: 827382

而JavaScript似乎以自己的方式生成随机数字:

Math.random(); Output: 0.802392144203139

我需要等价于math.random()的PHP代码,而不是新的javascript代码,因为我无法更改javascript。


它必须从当前时间开始播种吗? - Shawn31313
你想要能够预测随机数吗? - Orangepill
8
mt_rand() / mt_getrandmax() 的翻译是:生成一个位于0和1之间的随机浮点数,使用了PHP中的mt_rand()函数和mt_getrandmax()函数。 - elclanrs
它必须从当前的Unix时间开始种子。 - user2535512
3个回答

15

你可以使用一个返回值的函数:

PHP

function random() {
  return (float)rand()/(float)getrandmax();
}

// Generates
// 0.85552537614063
// 0.23554185613575
// 0.025269325846126
// 0.016418958098086

JavaScript

var random = function () {
  return Math.random();
};

// Generates
// 0.6855146484449506
// 0.910828611580655
// 0.46277225855737925
// 0.6367355801630765

@elclanrs的解决方案更简单,不需要在return中进行类型转换。


更新

这里有一个很好的关于PHP mt_rand()rand()区别的问题:
什么是mt_rand的缺点?


3

Javascript的Math.random函数可以产生0到1之间的随机数。虽然0是正确的输出,但1不应该被包含在内。@thiagobraga的答案可能会输出1。我的解决方案如下:

function random(){
    return mt_rand() / (mt_getrandmax() + 1);
}

这将生成一个介于0和0.99999999953434之间的随机数。


0

你可以尝试:

function random () {
    return (float)("0." . rand(1e15, 999999999999999));
}

甚至可以这样:

function random () {
   return rand(1e15, 999999999999999) / 1e15;
}

然而,@elclanrs的解决方案似乎更容易。我尝试过了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接