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

在JavaScript中生成两个数字之间的随机数,javascript,random,Javascript,Random,在JavaScript中是否有方法生成指定范围内的随机数(例如从1到6:1、2、3、4、5或6)?重要信息 以下代码仅在最小值为“1”时有效。它不适用于“1”以外的最小值。 如果您想要得到一个介于1(和仅1)和6之间的随机整数,您可以计算: const rndInt=Math.floor(Math.random()*6)+1 console.log(rndInt) 函数randomIntFromInterval(min,max){//min和max包括在内 返回Math.floor(Math.

在JavaScript中是否有方法生成指定范围内的随机数(例如从1到6:1、2、3、4、5或6)?

重要信息 以下代码仅在最小值为“1”时有效。它不适用于“1”以外的最小值。 如果您想要得到一个介于1(和仅1)和6之间的随机整数,您可以计算:

const rndInt=Math.floor(Math.random()*6)+1
console.log(rndInt)
函数randomIntFromInterval(min,max){//min和max包括在内
返回Math.floor(Math.random()*(max-min+1)+min)
}
常量rndInt=randomIntFromInterval(1,6)
console.log(rndInt)
其他解决方案:

  • (Math.random()*6|0)+1
  • ~~(Math.random()*6)+1

数学不是我的强项,但我一直在做一个项目,需要在正负之间生成大量随机数

function randomBetween(min, max) {
    if (min < 0) {
        return min + Math.random() * (Math.abs(min)+max);
    }else {
        return min + Math.random() * max;
    }
}
当然,您还可以添加一些验证,以确保您不会对数字以外的任何东西进行验证。还要确保最小值始终小于或等于最大值

返回一个介于最小值(包含值)和最大值(包含值)之间的值:

或者在最小值(包括在内)和最大值(不包括在内)之间:

有用示例(整数):

**而且总是很高兴被提醒(Mozilla):

Math.random()不提供加密安全的随机 数字。不要将其用于任何与安全相关的用途。使用网络 而是加密API,更准确地说是 window.crypto.getRandomValues()方法


我正在搜索用TypeScript编写的随机数生成器,我在阅读了所有答案后编写了这篇文章,希望它对TypeScript编码人员有用

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


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

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
固定版本。

Math.random()速度快,适用于多种用途,但如果需要加密安全值(不安全),或者需要完全一致无偏分布的整数,则不适用(其他答案中使用的乘法方法产生某些值的频率略高于其他答案)

在这种情况下,我们可以使用
crypto.getRandomValues()
生成安全整数,并拒绝生成的任何无法统一映射到目标范围的值。这会更慢,但除非生成的值数量非常大,否则它不应该很重要

为了澄清偏颇的分布关注点,考虑我们希望在1到5之间生成一个值的情况,但是我们有一个随机数生成器,它产生1到16之间的值(4位值)。。我们希望将相同数量的生成值映射到每个输出值,但16不能平均除以5:剩下1的余数。因此,我们需要拒绝1个可能生成的值,只有当我们得到15个较小的值中的一个时才能继续。我们的行为可能如下所示伪代码:

生成1-16范围内的4位整数。
如果我们生成1、6或11,那么输出1。
如果我们生成2、7或12,那么输出2。
如果我们生成3、8或13,那么输出3。
如果我们生成4、9或14,那么输出4。
如果我们生成5、10或15,那么输出5。
如果我们生成了16,则拒绝它并重试。
下面的代码使用了类似的逻辑,但生成了一个32位整数,因为这是JavaScript的标准
number
类型可以表示的最大通用整数大小(如果需要更大的范围,可以修改为使用
BigInt
s)无论选择的范围如何,被拒绝的生成值的分数将始终小于0.5,因此预期的拒绝次数将始终小于1.0,通常接近0.0;您不必担心它永远循环

const randomInteger=(最小值,最大值)=>{
常数范围=最大值-最小值;
常量maxGeneratedValue=0xFFFFFFFF;
const possibleResultValues=范围+1;
常量可能生成值=maxGeneratedValue+1;
常量余数=可能生成的值%possibleResultValues;
常量maxUnbiased=maxGeneratedValue-余数;
如果(!Number.isInteger(最小)| |!Number.isInteger(最大)||
max>Number.max_SAFE_INTEGER | minmaxGeneratedValue){
抛出新错误(`Range of${Range}(从${min}到${max})>${maxGeneratedValue}.`);
}否则如果(最大值<最小值){
抛出新错误(`max(${max})必须大于等于min(${min})。`;
}否则如果(最小值===最大值){
返回最小值;
} 
let生成;
做{
生成=加密getRandomValues(新UINT32数组(1))[0];
}而(生成>最大无偏);
返回最小值+(生成%possibleResultValues);
};
log(随机整数(-8,8));/-2
console.log(randomInteger(0,0));//0
log(随机整数(0,0xFFFFFFFF));//94445079
log(随机整数(-1,0xFFFFFFFF));
//错误:4294967296覆盖范围-1到4294967295的范围大于4294967295。
log(新数组(12.fill().map)(n=>randomInteger(8,12));
//[11,8,8,11,10,8,8,12,12,12,9,9]
示例

返回一个介于1和10之间的随机数:

Math.floor((Math.random() * 10) + 1);
结果可能是:
3

试试你自己:

--

或使用lodash/undescore:

\随机(最小值、最大值)

文件: -
-

尽管有许多答案和几乎相同的结果。我想添加我的答案并解释它的工作原理。因为了解它的工作原理比复制粘贴一行代码更重要。生成随机数只不过是简单的数学

代码:

jsfiddle:

随机整数:t
function randomNumber(min, max) {
  return Math.random() * (max - min) + 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;
    Rand(min: number, max: number): number {
        return (Math.random() * (max - min + 1) | 0) + min;
    }   
_.random(min, max)
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
Math.floor((Math.random() * 10) + 1);
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 getRandomInteger(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min)) + min;
}
function getRandomFloat(min, max) {
  return Math.random() * (max - min) + min;
}
function generateRandomInteger(min, max) {
  return Math.floor(min + Math.random()*(max + 1 - min))
}
function generateRandomInteger(min, max) {
  return Math.floor(min + Math.random()*(max + 1 - min))
}
function randomFloatFromInterval (min, max, fractionDigits) {
  const fractionMultiplier = Math.pow(10, fractionDigits)
  return Math.round(
    (Math.random() * (max - min) + min) * fractionMultiplier,
  ) / fractionMultiplier
}
randomFloatFromInterval(1,3,4) // => 2.2679, 1.509, 1.8863, 2.9741, ...
randomFloatFromInterval(1,3,0) // => 1, 2, 3
const getRandomNum = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min
function random(n, b = 0) {
    return Math.random() * (b-n) + n;
}
return Math.round(Math.random() * 5 + 1);
rando(1, 6)
<script src="https://randojs.com/1.0.0.js"></script>
function randomNumber(min, max) {
  if (min > max) {
    let temp = max;
    max = min;
    min = temp;
  }

  if (min <= 0) {
    return Math.floor(Math.random() * (max + Math.abs(min) + 1)) + min;
  } else {
    return Math.floor(Math.random() * (max - min + 1)) + min;
  }
}
randomNumber(-2, 3); // can be -2, -1, 0, 1, 2 and 3
randomNumber(-5, -2); // can be -5, -4, -3 and -2
randomNumber(0, 4); // can be 0, 1, 2, 3 and 4
randomNumber(4, 0); // can be 0, 1, 2, 3 and 4
var min_num = 900;
var max_num = 1000;
while(true){
    
    let num_random = Math.random()* max_num;
    console.log('input : '+num_random);
    if(num_random >= min_num){
        console.log(Math.floor(num_random));
       break; 
    } else {
        console.log(':::'+Math.floor(num_random));
    }
}
function randomNum(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}
randomNum(1, 6);
Math.ceil(Math.random() * 6)
Math.floor(Math.random() * 6) + 1
Math.floor(Math.random() * (max - min + 1)) + min;