Случайный элемент между -x и x в javascript

#javascript #math #random

Вопрос:

Привет, я хотел бы сгенерировать случайное число между -x и x в JavaScript. Это то, что у меня есть :

 function randomInt(nb){
let absoluteVal = Math.ceil(Math.random()*nb)
let sign = Math.floor(Math.random()*2)
return sign == 1 ? absoluteVal*(-1) : absoluteVal;
}
console.log(randomInt(4)) 

Это работает, но довольно неэлегантно.
Мне было интересно, знает ли кто-нибудь лучшее решение.
Заранее спасибо.

Ответ №1:

Например, с n = 4 помощью, он генерирует эти значения:

 -4 -3 -2 -1  0  1  2  3  4
 

Всего 9 элементов. Используя положительные значения, он генерирует 0 8 со смещением -4 .

 function randomInt(n) {
    return Math.floor(Math.random() * (2 * n   1)) - n;
}

console.log(randomInt(4));
console.log(randomInt(4));
console.log(randomInt(4));
console.log(randomInt(4));
console.log(randomInt(4));
console.log(randomInt(4));
console.log(randomInt(4));
console.log(randomInt(4)); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

Ответ №2:

Использование Math.random() (возвращает случайное число от 0 до 1) позволяет вам сделать это (использование Math.ceil() используется для округления числа до следующего по величине целого числа)

 function randomInt(nb){
   return Math.ceil(Math.random() * nb) * (Math.round(Math.random()) ? 1 : -1)
}

console.log(randomInt(4));
console.log(randomInt(4));
console.log(randomInt(4));
console.log(randomInt(4));
console.log(randomInt(4)); 

Подробнее о Math.ceil() https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/ceil

Подробнее о Math.random() https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random