2011-12-23 3955 views

回答

92

不要使用您現有的功能 - 只需撥打Math.random()即可。如果< 0.5,那麼-1,否則1:

var plusOrMinus = Math.random() < 0.5 ? -1 : 1; 
+4

完美的作品,有趣,我不能在網上任何地方找到答案。 – 2011-12-23 03:34:31

+1

不錯的優雅的解決方案,謝謝 – 2015-01-28 22:32:29

9

只是爲了好玩:

var plusOrMinus = [-1,1][Math.random()*2|0]; 

var plusOrMinus = Math.random()*2|0 || -1; 

但使用你的想法會維護。

+1

一方面,我應該說有一點可以說是可讀性。另一方面,我的答案剃了3個字符的榮譽(雖然我可以爭辯說,所有3個字符都是不必要的空格)。如果你也從'0.5'中消除'0',那麼我的長度縮短1個字符。 :-) – ziesemer 2011-12-23 04:07:59

+0

是的,只是爲了好玩。 :-) – RobG 2011-12-23 09:47:27

+0

那是一段代碼! – egidiocs 2017-11-13 06:28:00

35

我一直的

Math.round(Math.random()) * 2 - 1 

,因爲它只是有點有道理的風扇。

  • Math.round(Math.random())會給你0或1

  • 乘以2的結果會給你0或2

  • 再減去1給你-1或1

直觀!

+0

@RobG - 你是對的,先生 – majman 2013-03-06 22:04:06

+0

在我看來,這是一個更好的「隨機」 - 或+創造者。選擇的答案對我來說不起作用,因爲如果我想要一個小於4的數字,而不是負數?這只是一個更好的解決方案。 – Brendan 2014-08-20 22:30:27

3

有很多方法可以做到這一點,因爲以前的答案顯示。

Math.round()和的Math.random最快的福利組合:

// random_sign = -1 + 2 x (0 or 1); 
random_sign = -1 + Math.round(Math.random()) * 2; 

您還可以使用Math.cos()(which is also fast):

// cos(0) = 1 
// cos(PI) = -1 
// random_sign = cos(PI x (0 or 1)); 
random_sign = Math.cos(Math.PI * Math.round(Math.random())); 
3

你爲什麼不試試:

(Math.random() - 0.5) * 2 

50%有機會產生負值並且還有一個隨機數生成的。

或者,如果確實需要-1/1:

Math.ceil((Math.random() - 0.5) * 2) < 1 ? -1 : 1;