2016-02-12 2 views
-1

Я пытаюсь добавить или вычесть от 1 до 5 чисел.Как сделать случайное + или - значение

До сих пор у меня есть:

var number:int = Math.random() * 5; 

Теперь я хочу, чтобы сделать его случайным образом, как положительный или отрицательный.

Могу ли я использовать следующее:

// use math random to pick 1 or 0 and if 0 then negative 
number = Math.random() * 1 ? number : number * -1; 

, но я не люблю его. В моем опыте с математическим случайным числом всегда будет 0 ???. Есть ли способ лучше?

+0

Я не знаю, должен ли я создать другой вопрос, но есть ли какая-то математическая функция, которая просто выбирает число от 1 до 3? Что-то вроде 'Math.pickANumberFrom (1, 3);' или 'Math.pickAny (0, 1, 2);' –

ответ

6
var plusOrMinusVal = Math.random() < 0.5 ? -1 : 1; 
1
Math.round(Math.random()) > 0 ? 1 : -1; 
  • Math.random() - случайное от 0 до 1, 0.54398938
  • Math.round() - круглое число для рационального значения, 0,54398938 теперь 1
  • x > 0 ? 1 : -1 - проверить, если х больше 0, назначить 1, else -1, 1 больше 0 - назначить 1

function random(){ 
 
    document.querySelector('#number').innerHTML = Math.round(Math.random()) > 0 ? 1 : -1; 
 
}
<h3>You randomed: <span id="number">x</span></h3> 
 
<button onclick="random()">Try again</button>

+1

Спасибо. Вы избили системного чувака, http://imgur.com/9VSEieN StackOverflow не может поверить, что вы могли бы так быстро ответить! –

+3

Как насчет простой '[1, -1] [+ (Math.random()> 0,5)]' или использовать тернарный оператор? Округление действительно не имеет смысла. –

+0

@Derek 朕 會 功夫 ну, это случай предпочтения, мне лично не нравится hardcoding –

1
Math.floor(Math.random() * 11) - 5; 

floor даст нормальное распределение значений в то время как round не будет для минимальных и максимальных значений. Но тогда вы должны помнить, что добавьте 1 к аргументу. Кроме того, Math.random() никогда не возвращает 1, это означает, что в этом случае мы никогда не получаем 11 от Math.floor. Максимально возможное значение равно 10.

Смежные вопросы