function randomInt(min,max)
{
return Math.floor(Math.random()*(max-(min+1))+(min+1));
}
-4
如果你想得到1到6之间,你会计算:
Math.floor(Math.random() * 6) + 1
哪里:
1是起始编号
6是可能结果的数量(1开始(6) - 结束(1))
18
我写了更灵活的函数,可以给你随机数,但不仅仅是整数 .
function rand(min,max,interval)
{
if (typeof(interval)==='undefined') interval = 1;
var r = Math.floor(Math.random()*(max-min+interval)/interval);
return r*interval+min;
}
var a = rand(0,10); //can be 0, 1, 2 (...) 9, 10
var b = rand(4,6,0.1); //can be 4.0, 4.1, 4.2 (...) 5.9, 6.0
修正版 .
1679
function random(min, max){
return Math.floor(Math.random() * (max - min + 1)) + min;
}
-1
function randomIntFromInterval(min,max) // min and max included
{
return Math.floor(Math.random()*(max-min+1)+min);
}
function randInt(min, max) {
var MAX_UINT32 = 0xFFFFFFFF;
var range = max - min;
if (!(range <= MAX_UINT32)) {
throw new Error(
"Range of " + range + " covering " + min + " to " + max + " is > " +
MAX_UINT32 + ".");
} else if (min === max) {
return min;
} else if (!(max > min)) {
throw new Error("max (" + max + ") must be >= min (" + min + ").");
}
// We need to cut off values greater than this to avoid bias in distribution
// over the range.
var maxUnbiased = MAX_UINT32 - ((MAX_UINT32 + 1) % (range + 1));
var rand;
do {
rand = crypto.getRandomValues(new Uint32Array(1))[0];
} while (rand > maxUnbiased);
var offset = rand % (range + 1);
return min + offset;
}
console.log(randInt(-8, 8)); // -2
console.log(randInt(0, 0)); // 0
console.log(randInt(0, 0xFFFFFFFF)); // 944450079
console.log(randInt(-1, 0xFFFFFFFF));
// Uncaught Error: Range of 4294967296 covering -1 to 4294967295 is > 4294967295.
console.log(new Array(24).fill().map(n => randInt(8, 12)));
// [11, 8, 8, 11, 10, 8, 8, 12, 12, 12, 9, 9,
// 11, 8, 11, 8, 8, 8, 11, 9, 10, 12, 9, 11]
console.log(randInt(10, 8));
// Uncaught Error: max (8) must be >= min (10).
function getR(lower, upper) {
var percent = (Math.random() * 100);
// this will return number between 0-99 because Math.random returns decimal number from 0-0.9929292 something like that
//now you have a percentage, use it find out the number between your INTERVAL :upper-lower
var num = ((percent * (upper - lower) / 100));
//num will now have a number that falls in your INTERVAL simple maths
num += lower;
//add lower to make it fall in your INTERVAL
//but num is still in decimal
//use Math.floor>downward to its nearest integer you won't get upper value ever
//use Math.ceil>upward to its nearest integer upper value is possible
//Math.round>to its nearest integer 2.4>2 2.5>3 both lower and upper value possible
console.log(Math.floor(num), Math.ceil(num), Math.round(num));
}
function randomNR (x, y){
return Math.round((Math.random() * x + y));
}
// dice >> random number between 1-6
// dice functionality without function >> Math.round((Math.random() * 5 + 1))
console.log(randomNR(5,1));
// coin >> random number between 0-1
// coin functionality without function >> Math.round((Math.random() * 1))
console.log(randomNR(1,0))
18 回答
或者,在Underscore
我发现上面的Francisc的解决方案不包括结果中的最小或最大数字,所以我改变了它:
如果你想得到1到6之间,你会计算:
哪里:
1是起始编号
6是可能结果的数量(1开始(6) - 结束(1))
我写了更灵活的函数,可以给你随机数,但不仅仅是整数 .
修正版 .
它所做的“额外”是允许随机间隔不以1开头 . 因此,您可以获得10到15之间的随机数 . 灵活性 .
您可以使用
crypto.getRandomValues()
生成均匀分布的加密安全随机数,而不是Math.random()
. 这是一个例子:jsfiddle:https://jsfiddle.net/cyGwf/477/
Random Integer :要获取
min
和max
之间的随机整数,请使用以下代码Random Floating Point Number :要获取
min
和max
之间的随机浮点数,请使用以下代码参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random
其他方案:
(Math.random() * 6 | 0) + 1
~~(Math.random() * 6) + 1
TL;DR
得到随机数
generateRandomInteger(-20, 20);
EXPLANATION BELOW
我们需要得到一个随机整数,比如说min和max之间的 X .
对?
即 min <= X <= max
如果我们从等式中减去min,这相当于
0 <= (X - min) <= (max - min)
现在,让我们将其与随机数 r 相乘
0 <= (X - min) * r <= (max - min) * r
现在,让我们将 min 添加回等式
min <= min + (X - min) * r <= min + (max - min) * r
现在,让我们选择一个导致 r 的函数,使其满足我们的等式范围[min,max] . 这只有 0<= r <=1 才有可能
好 . 现在, r 的范围,即[0,1]与Math.random()函数结果非常相似 . 不是吗?
例如,
案例r = 0
min
0 *(max
-min
)= min案例r = 1
min
1 *(max
-min
)= max使用Math.random的随机情况0 <= r <1
min
r *(max
-min
)= X ,其中 X 的范围为 min <= X < max以上结果 X 是随机数字 . 但是由于Math.random(),我们的左边界是包容性的,右边界是独占的 . 要包含我们的右边界,我们将右边界增加1并将结果置于底层 .
获取随机数
generateRandomInteger(-20, 20)
;感觉你需要在最大数字上加1,然后减去任何这个的最小数量,我需要做很多随机整数,这个函数有效 .
这适用于负数和正数,我正在处理库的小数 .
Math.random()
从Mozilla Developer Network文档:
有用的例子:
尽管有很多答案和几乎相同的结果 . 我想补充一下我的答案并解释它的工作原理 . 因为理解它的工作而不是复制粘贴一行代码很重要 . 生成随机数只不过是简单的数学 .
码:
我正在搜索用TypeScript编写的随机数生成器,我在阅读完所有答案之后编写了这个,希望它适用于TypeScript编码器 .
数学不是我的强项,但我一直致力于一个项目,我需要在正面和负面之间产生大量的随机数 .
例如
当然,您还可以添加一些验证,以确保不使用除数字之外的任何其他内容 . 还要确保min始终小于或等于max .
为了在javascript中创建一个随机数,我们可以使用内置的javascript
Math
对象 .Math
对象包含函数Math.random()
. 此函数执行以下操作(源MDN):有了这个功能,我们可以轻松地将其扩展到更复杂的场景 . 例如:
例
返回1到10之间的随机数:
结果可能是:
3
试试自己:here
或使用lodash / unexcore:
_.random(min, max)
文件: - lodash - undescore