在JavaScript中生成两个数字之间的随机数

有没有办法在JavaScript中的指定范围(例如从1到6:1,2,3,4,5或6)生成一个随机数字?

如果你想得到1到6,你会计算:

Math.floor(Math.random() * 6) + 1 

哪里:

  • 1是起始号码
  • 6是可能结果的数量(1 +开始(6) – 结束(1)
 function randomIntFromInterval(min,max) { return Math.floor(Math.random()*(max-min+1)+min); } 

它所做的“额外”是它允许不以1开头的随机间隔。例如,你可以得到一个从10到15的随机数。 灵活性。

的Math.random()

从Mozilla开发者networking文档:

 // Returns a random integer between min (included) and max (included) function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } 

有用的例子:

 // 0 -> 10 Math.floor(Math.random() * 11); // 1 -> 10 Math.floor(Math.random() * 10) + 1; // 5 -> 20 Math.floor(Math.random() * 16) + 5; // -10 -> (-2) Math.floor(Math.random() * 9) - 10; 

其他解决scheme

  • (Math.random() * 6 | 0) + 1
  • ~~(Math.random() * 6) + 1
 var x = 6; // can be any number var rand = Math.floor(Math.random()*x) + 1; 

Math.random()将始终在0和1之间。逻辑是将randomly0 reducemax-min

随机情况0

max – 0 *( maxmin )= max

随机情况1

max – 1 *( maxmin )= min

随机情况0 <r <1

max -r *( maxmin )= X ,其中X具有min < X < max的范围

 function generateRandomInteger(min, max) { return Math.floor(max - Math.random()*(max-min)) } // Similarly for Numeric function generateRandomNumeric(min, max) { return max - Math.random()*(max-min) } 

得到随机数

generateRandomInteger(100, 200) ;

该解决scheme适用于下面的用例。 我详细列出了他们的答案和其他解决scheme在其中一些失败。

  • 在两个正整数之间,ex 100,200 generateRandomInteger(100, 200)
  • 在0和正整数之间,例如0,200 generateRandomInteger(0, 200)
  • 在1和正整数之间,例如1,2 generateRandomInteger(1, 200)随机整数generateRandomInteger(1, 200)
  • 在0和1之间,使用generateRandomNumeric(0, 1)
  • 在负整数和0之间,例如-20,0 generateRandomInteger(-20, 0)随机整数generateRandomInteger(-20, 0)
  • 在负整数和-1之间,例如-20,-1 generateRandomInteger(-20, -1)随机整数generateRandomInteger(-20, -1)
  • 在2个负整数之间,例如-20,-10 generateRandomInteger(-20, -10)随机整数generateRandomInteger(-20, -10)
  • 在负整数和正整数之间,例如-20,20 generateRandomInteger(-20, 20)随机整数generateRandomInteger(-20, 20)

或者,在下划线

 _.random(min, max) 

math不是我的强项,但是我一直在做一个项目,我需要在正面和负面之间产生大量的随机数。

 function randomBetween(min, max) { if (min < 0) { return min + Math.random() * (Math.abs(min)+max); }else { return min + Math.random() * max; } } 

例如

 randomBetween(-10,15)//or.. randomBetween(10,20)//or... randomBetween(-200,-100) 

当然,你也可以添加一些validation,以确保你不用数字以外的任何东西。 还要确保min始终小于或等于max。

jsfiddle: https ://jsfiddle.net/cyGwf/477/

随机整数 :要获得minmax之间的随机整数,请使用以下代码

 function getRandomInteger(min, max) { min = Math.ceil(min); max = Math.floor(max); return Math.floor(Math.random() * (max - min)) + min; } 

随机浮点数 :要获得minmax之间的随机浮点数,请使用以下代码

 function getRandomFloat(min, max) { return Math.random() * (max - min) + min; } 

参考: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random

我写了更灵活的函数,可以给你随机数,而不仅是整数。

 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 

固定版本。

我正在用TypeScript编写随机数字生成器,我在阅读完所有答案后都写了这个,希望能对TypeScript编码器有效。

  Rand(min: number, max: number): number { return (Math.random() * (max - min + 1) | 0) + min; } 

返回1到10之间的随机数字:

 Math.floor((Math.random() * 10) + 1); 

结果可能是: 3

试试自己: 在这里

或使用lodash / unexcore:

_.random(min, max)

文档: lodash – 不喜欢

尽pipe有很多答案和几乎相同的结果。 我想补充我的答案,并解释它的工作。 因为了解它的工作而不是复制粘贴一行代码是很重要的。 生成随机数不过是简单的math。

码:

 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)); } 

感觉你需要添加1的最大数量,然后减去任何这个工作的最小数量,我需要做很多随机整数,这个function的作品。

 var random = function(max, min) { high++; return Math.floor((Math.random()) * (max - min)) + min; }; 

这与负面和正面的数字,我正在为图书馆小数工作。

您可以使用crypto.getRandomValues()来生成均匀分布的密码安全随机数,而不是使用Math.random() 。 这是一个例子:

 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 random(min, max){ return Math.floor(Math.random() * (max - min + 1)) + min; } 

我发现Francisc的解决scheme不包括结果中的最小或最大数字,所以我改变了这样的:

 function randomInt(min,max) { return Math.floor(Math.random()*(max-(min+1))+(min+1)); } 

这个解决scheme是显示从0到1的随机数。

 Math.random(); 

如果我们使用这个,我们可以得到如0.6353540565013625的结果