【问题标题】:PHP equivalent of javascript Math.random()PHP 等效于 javascript Math.random()
【发布时间】:2013-07-15 10:30:49
【问题描述】:

我需要一个 PHP 函数,它生成与具有相同种子的 javascript Math.random() 相同的随机数。

关于 math.random() 的 MDN:

随机数生成器是从当前时间播种的,如 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。

【问题讨论】:

  • 它是否从当前时间开始播种?
  • 你希望能够预测随机数吗?
  • mt_rand() / mt_getrandmax()stackoverflow.com/questions/14155603/…
  • 它必须从当前的unix时间开始。
  • 感谢@elclanrs,它有效!

标签: php javascript random time


【解决方案1】:

你可以试试:

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

甚至:

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

不过,@elclanrs 的解决方案似乎要容易得多。我试过了。

【讨论】:

    【解决方案2】:

    您可以使用返回值的函数:

    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 解决方案更简单,不需要演员作为回报。


    更新

    这里有一个关于 PHP mt_rand()rand() 的区别的好问题:
    What's the disadvantage of mt_rand?

    【讨论】:

      【解决方案3】:

      Javascript 的 Math.random 给出了一个介于 0 和 1 之间的随机数。零是正确的输出,但不应包含 1。 @thiagobraga 的回答可以给出 1 作为输出。我的解决方案是这样的:

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

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

      【讨论】:

        猜你喜欢
        • 2015-01-16
        • 2010-12-29
        • 2010-10-21
        • 1970-01-01
        • 2014-10-20
        • 2015-01-04
        • 2013-10-01
        • 2010-11-07
        • 2020-04-21
        相关资源
        最近更新 更多