Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中包含负数的范围之间生成随机数_Javascript_Random_Range_Negative Number - Fatal编程技术网

在javascript中包含负数的范围之间生成随机数

在javascript中包含负数的范围之间生成随机数,javascript,random,range,negative-number,Javascript,Random,Range,Negative Number,我试图设置一个函数,在一个范围内创建一个随机数 我需要让它与负值一起工作,这样我就可以 randomBetweenRange( 10, 20) randomBetweenRange(-10, 10) randomBetweenRange(-20, -10) 这就是我正在尝试的,它有点混乱,目前randomBetweenRange(-20,-10)不起作用 function randomBetweenRange(a, b){ var neg; var pos; if

我试图设置一个函数,在一个范围内创建一个随机数

我需要让它与负值一起工作,这样我就可以

randomBetweenRange( 10,  20)
randomBetweenRange(-10,  10)
randomBetweenRange(-20, -10)
这就是我正在尝试的,它有点混乱,目前
randomBetweenRange(-20,-10)
不起作用

function randomBetweenRange(a, b){
    var neg;
    var pos;

    if(a < 0){
        neg = Math.abs(a) + 1;
        pos = (b * 2) - 1;
    }else{
        neg = -Math.abs(a) + 1;
        var pos = b;
    }

    var includeZero = true;
    var result;

    do result = Math.ceil(Math.random() * (pos + neg)) - neg;
    while (includeZero === false && result === 0);

    return result;
}
范围(a,b)之间的函数随机性{ var neg; var-pos; if(a<0){ neg=数学abs(a)+1; pos=(b*2)-1; }否则{ neg=-Math.abs(a)+1; var pos=b; } var includeZero=true; var结果; do result=Math.ceil(Math.random()*(pos+neg))-neg; 而(includeZero==false&&result==0); 返回结果; } 我怎样才能让它工作

do result = Math.ceil(Math.random() * (pos + neg)) - neg;
特别是
Math.random()*(pos+neg)
返回错误的范围。如果
pos=-20
neg=-30
,pos和neg之间的范围应为10,但您的操作返回-50。您还应该向范围中添加一个,因为从技术上讲,这是可能的数量(例如:如果您想生成返回{0,1}的函数,pos和neg之间的范围是1,但有两种可能返回数字),并且从结果中减去另一个1,因为您使用的是
Math.ceil


您的else子句还重新声明了
var pos

假设您总是先有一点价值,这段代码会起作用,请参阅下面的注释,并毫不犹豫地询问

var a=parseInt(提示(“第一个值”);
var b=parseInt(提示(“第二个值”);
var结果=0;
//这里,b-a将获得任何pos+neg值的间隔。
结果=Math.floor(Math.random()*(b-a))+a;
/*第一种情况是我们得到了两个负值
*我们做了一个小的pos来获取intervale
*因此,我们使用-a来设置开始
*/
if(a<0){
if(b<0){
a=数学abs(a);
结果=Math.floor(Math.random()*(a+b))-a;
}
/*第二种情况是我们得到了两个负值
*我们把这个小家伙变成负数是为了得到中间价
*因此,我们使用-a来设置开始
*/
}否则{
如果(b>0){
a=a*-1;
结果=Math.floor(Math.random()*(a+b))-a;
}
}
console.log(“A:+A+”| B:+B+”| Int:+(A+B)+“/”+Math.abs((A-B));

控制台日志(结果)您已经在开头声明了变量“pos”。那你为什么要在“其他”部分声明呢?(var pos=b;)

因此,对于这一说法,, do result=Math.ceil(Math.random()*(pos+neg))-neg


“pos”将没有任何值。

如果要生成一个介于-50和50之间的数字,请获取一个介于0和100之间的随机数,然后减去50

var randomNumber=Math.floor(Math.random()*101)-50;

控制台日志(随机编号)可能的重复项如果不清楚,则假设可以生成的最低数字为0,最高数字为pos+neg。然后我们从结果中减去负,0/底现在是负,最高的(pos+neg)变成负。我可能只是让它变得不那么容易理解。-1:你需要使用
Math.floor
来获得正确的分布,而不是
Math.ceil