JavaScript随机正数或负数

我需要创build一个随机-1或1来乘以一个已经存在的数字。 问题是我目前的随机函数产生一个-1,0或1.什么是最有效的方法呢?

不要使用你现有的函数 – 只要调用Math.random() 。 如果<0.5那么-1,否则1:

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

我一直是的粉丝

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

因为它只是有道理的。

  • Math.round(Math.random())会给你0或1

  • 乘以2的结果会给你0或2

  • 然后减1会给你-1或1。

直观!

就是图个好玩儿:

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

要么

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

但是使用你认为可以维护的东西。

以前的答案显示有很多方法可以做到这一点。

Math.round()和Math.random的最快组合:

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

你也可以使用Math.cos()( 也是很快的 ):

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

你为什么不试试:

 (Math.random() - 0.5) * 2 

有50%的机会产生负值,还会产生一个随机数。

或者,如果真的需要-1/1:

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