如何随机生成-​​0.5和0.5范围内的数字?

Age*_*bra 3 javascript random

在javascript中如何随机生成介于-0.5和0.5之间的数字?以下似乎只给出正数,没有负数.

Math.random(-0.15, 0.15)
Run Code Online (Sandbox Code Playgroud)

the*_*eye 9

引用MDN Math.random,

Math.random()函数返回范围[0,1)中的浮点伪随机数,即从0(包括)到最多但不包括1(不包括)

因此,生成0到1之间的随机数,并从中减去0.5.

Math.random() - 0.5
Run Code Online (Sandbox Code Playgroud)

注意: Math.random()不期望任何参数.因此,您无法指定任何范围.


如果要在范围之间生成随机数,请使用MDN中的示例代码段,

// Returns a random number between min (inclusive) and max (exclusive)
function getRandomArbitrary(min, max) {
  return Math.random() * (max - min) + min;
}
Run Code Online (Sandbox Code Playgroud)

带范围的演示

function getRandomArbitrary(min, max) {
  return Math.random() * (max - min) + min;
}


function appendToResult(value) {
  document.getElementById("result").innerHTML += value + "<br />";
}

document.getElementById("result").innerHTML = "";

for (var i = 0; i < 10; i += 1) {
  appendToResult(getRandomArbitrary(-0.35, 0.35));
}
Run Code Online (Sandbox Code Playgroud)
<pre id="result" />
Run Code Online (Sandbox Code Playgroud)

这是因为,表达式

Math.random() * (max - min) + min
Run Code Online (Sandbox Code Playgroud)

将按以下方式评估.第一,

Math.random()
Run Code Online (Sandbox Code Playgroud)

将被评估以获得0和1范围内的随机数,然后

Math.random() * (max - min)
Run Code Online (Sandbox Code Playgroud)

它将乘以maxmin值之间的差值.在你的情况,可以说max0.35min-0.35.所以,max - min成为0.7.所以,Math.random() * (max - min)给范围内的数量00.7(因为即使Math.random()产生1,当你与它相乘0.7,结果会变成0.7).然后,你这样做

Math.random() * (max - min) + min
Run Code Online (Sandbox Code Playgroud)

所以,对于你的情况,这基本上变成了,

Math.random() * (0.35 - (-0.35)) + (-0.35)
(Math.random() * 0.7) - 0.35
Run Code Online (Sandbox Code Playgroud)

因此,如果(Math.random() * 0.7)生成任何大于的值0.35,因为0.35从中减去它,它将变为0和之间的某个数字0.35.如果(Math.random() * 0.7)生成的值小于0.35,则因为0.35从中减去该值,它将变为-0.35和之间的数字0.