首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等效于javascript Math.random()

问等效于javascript Math.random()
EN

Stack Overflow用户
提问于 2013-07-17 02:38:37
回答 3查看 15.5K关注 0票数 9

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

关于math.random()的MDN:

随机数生成器是从当前时间开始的,就像在Java中一样。

到目前为止,我尝试了PHP的rand()生成类似这样的内容:

代码语言:javascript
复制
srand( time() ); // I use time as seed, like javascript does
echo rand();
Output: 827382

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

代码语言:javascript
复制
Math.random(); Output: 0.802392144203139

我需要与math.random()等价的PHP代码,而不是新的javascript代码。我不能改变javascript。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-17 02:57:31

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

PHP

代码语言:javascript
复制
function random() {
  return (float)rand()/(float)getrandmax();
}

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

JavaScript

代码语言:javascript
复制
var random = function () {
  return Math.random();
};

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

@elclanrs‘s的解决方案更简单,不需要演员作为回报。

更新

关于PHP mt_rand()和rand()之间的区别,这里有一个很好的问题:

What's the disadvantage of mt

票数 13
EN

Stack Overflow用户

发布于 2014-11-04 10:45:06

Javascript的Math.random给出了0到1.0之间的随机数。零是一个正确的输出,但不应该包括1。@thiagobraga的答案可以给出1作为输出。我的解决办法是:

代码语言:javascript
复制
function random(){
    return mt_rand() / (mt_getrandmax() + 1);
}

这将给出一个0到0.99999999953434之间的随机数。

票数 3
EN

Stack Overflow用户

发布于 2013-07-17 02:44:46

你可以试试:

代码语言:javascript
复制
function random () {
    return (float)("0." . rand(1e15, 999999999999999));
}

甚至:

代码语言:javascript
复制
function random () {
   return rand(1e15, 999999999999999) / 1e15;
}

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17690165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档