javascript - js區間亂數 - 亂數區間




在JavaScript中生成兩個數字之間的隨機數 (12)

Math.random()函數在[0,1)範圍內返回一個浮點偽隨機數; 即從0(包括)到1(不包括)

我們從0max-min randomly add max-min

案例0

min + 0 *( max - min )= 分鐘

情況1

min + 1 *( max - min )= 最大

使用Math.random 0 <= r <1的隨機情況

min + r *( max - min )= X ,其中X具有min <= X < max的範圍

上面的結果X是一個隨機數字。 但是,由於Math.random(),我們的左邊界是包容性的,右邊界是排他性的。 為了包含我們的右邊界,我們增加1的右邊界並將結果放置。

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

獲得隨機數

generateRandomInteger(-20, 20) ;

有什麼方法可以在JavaScript中的指定範圍內生成一個隨機數(例如從1到6:1,2,3,4,5或6)?


Math.random()

Math.random()開發者網絡文檔:

// 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;


儘管有很多答案和幾乎相同的結果。 我想補充我的答案並解釋它的工作。 因為了解其工作非常重要,而不是複制粘貼一行代碼。 生成隨機數不過是簡單的數學。

碼:

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和6之間的關係,你會計算出:

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

哪裡:

  • 1是起始號碼
  • 6是可能結果的數量(1 +開始(6) - 結束(1)

您可以使用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 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;
    }   


數學不是我的強項,但我一直在做一個項目,我需要在正面和負面之間產生大量的隨機數。

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)

當然,您也可以添加一些驗證,以確保您不會使用數字以外的任何方式進行此操作。 還要確保min始終小於或等於max。


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

它所做的“額外”是它允許不以1開頭的隨機時間間隔。例如,你可以得到一個從10到15的隨機數。 靈活性。


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




random