JavaScript随机正数或负数

JavaScript随机正数或负数,javascript,random,Javascript,Random,我需要创建一个随机的-1或1来将一个已经存在的数字乘以。问题是我当前的随机函数生成了-1、0或1。最有效的方法是什么?不要使用现有函数-只需调用Math.random()。如果小于0.5,则为-1,否则为1: var plusOrMinus = Math.random() < 0.5 ? -1 : 1; var plusOrMinus=Math.random()

我需要创建一个随机的-1或1来将一个已经存在的数字乘以。问题是我当前的随机函数生成了-1、0或1。最有效的方法是什么?

不要使用现有函数-只需调用
Math.random()
。如果小于0.5,则为-1,否则为1:

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

只是为了好玩:

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


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

我一直都是它的粉丝

Math.round(Math.random()) * 2 - 1
因为这有点道理

  • Math.round(Math.random())
    将为您提供0或1

  • 将结果乘以2将得到0或2

  • 然后减去1得到-1或1


直觉

正如前面的答案所示,有很多方法可以做到这一点

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

// random_sign = -1 + 2 x (0 or 1); 
random_sign = -1 + Math.round(Math.random()) * 2;   
也可以使用Math.cos()():

你为什么不试试:

(Math.random() - 0.5) * 2
有50%的几率为负值,同时还可以产生一个随机数

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

Math.ceil((Math.random() - 0.5) * 2) < 1 ? -1 : 1;
Math.ceil((Math.random()-0.5)*2)<1-1 : 1;
我正在使用


非常好用,有趣的是,我在网上找不到答案。一方面,我应该说,为了可读性,有一些话要说。另一方面,我的回答中删去了3个字符(尽管我可以说所有3个字符都是不必要的空白),这是值得称赞的。如果您还从
0.5
:-)中删除
0
,则我的字符将缩短1个字符在我看来,这是一个更好的“随机”-或+创造者。选择的答案对我来说根本不起作用,因为如果我想要一个小于4且不是负数的数字怎么办?这只是一个全面的更好的解决方案。@Brendan-虽然我同意这是一个更灵活的解决方案,但OP的要求特别是需要返回“随机-1或+1”。值得一提的是,这个解决方案虽然更加灵活,但也需要更多的运算,比如额外调用
Math.round
、乘法和减法,而不是单个条件检查。
(Math.random()-0.5)*2
是我见过的最干净的方法。我认为这并不能给出一个完全相等的+/-随机数,还是我错了<代码>0.999…-0.5=0.4999…,但
0-0.5=-0.5
。(如Math.random()返回0到0.999…)
(Math.random() - 0.5) * 2
Math.ceil((Math.random() - 0.5) * 2) < 1 ? -1 : 1;
var plusOrMinus = _.shuffle([-1, 1])[0];