猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
在JavaScript中生成特定范围内的随机整数?
在JavaScript中生成特定范围内的随机整数?
缥缈止盈
浏览 993
回答 4
4回答
斯蒂芬大帝
Mozilla Developer Network页面上有一些示例:/** * Returns a random number between min (inclusive) and max (exclusive) */function getRandomArbitrary(min, max) { return Math.random() * (max - min) + min;}/** * Returns a random integer between min (inclusive) and max (inclusive). * The value is no lower than min (or the next integer greater than min * if min isn't an integer) and no greater than max (or the next integer * lower than max if max isn't an integer). * Using Math.round() will give you a non-uniform distribution! */function getRandomInt(min, max) { min = Math.ceil(min); max = Math.floor(max); return Math.floor(Math.random() * (max - min + 1)) + min;}这是它背后的逻辑。这是一个简单的三条规则:Math.random()返回Number0(包括)和1(不包括)之间的值。所以我们有这样的间隔:[0 .................................... 1)现在,我们想要一个介于min(包含)和max(独家)之间的数字:[0 .................................... 1)[min .................................. max)我们可以使用它Math.random来获取[min,max]区间内的通讯记录。但是,首先我们应该通过min从第二个区间减去一点来解决问题:[0 .................................... 1)[min - min ............................ max - min)这给出了:[0 .................................... 1)[0 .................................... max - min)我们现在可以申请Math.random然后计算通讯员。我们选择一个随机数: Math.random() |[0 .................................... 1)[0 .................................... max - min) | x (what we need)所以,为了找到x,我们会做:x = Math.random() * (max - min);不要忘记添加min回来,以便我们在[min,max]间隔中得到一个数字:x = Math.random() * (max - min) + min;这是MDN的第一个功能。第二个,返回一个介于min和之间的整数max。现在获取整数,你可以使用round,ceil或floor。您可以使用Math.round(Math.random() * (max - min)) + min,但这会产生非均匀分布。这两种,min而max只有大约一半滚动的机会:min...min+0.5...min+1...min+1.5 ... max-0.5....max└───┬───┘└────────┬───────┘└───── ... ─────┘└───┬──┘ ← Math.round() min min+1 max与max从区间中排除,它有一个甚至更少的机会,而不是滚动min。随着Math.floor(Math.random() * (max - min +1)) + min你有一个完美均匀的分布。min.... min+1... min+2 ... max-1... max.... max+1 (is excluded from interval)| | | | | |└───┬───┘└───┬───┘└─── ... ┘└───┬───┘└───┬───┘ ← Math.floor() min min+1 max-1 max你不能使用ceil()和-1在那个等式中,因为max现在滚动的机会略少,但你也可以滚动(不需要的)min-1结果。
0
0
0
ITMISS
var randomnumber = Math.floor(Math.random() * (maximum - minimum + 1)) + minimum;
0
0
0
莫回无
的Math.random()从Mozilla Developer Network文档中:// Returns a random integer between min (include) and max (include)Math.floor(Math.random() * (max - min + 1)) + min;有用的例子:// 0 - 10Math.floor(Math.random() * 11);// 1 - 10Math.floor(Math.random() * 10) + 1;// 5 - 20Math.floor(Math.random() * 16) + 5;// -10 - (-2)Math.floor(Math.random() * 9) - 10;
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
JavaScript
算法与数据结构
数据结构中,与所使用的计算机无关的数据是什么?
1 回答
学完C语言之后是先学数据结构还是先学JAVA好呢?
1 回答
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续