2016-10-14 53 views
1

我想设置一个范围之间生成范围之间的随机数,包括在javascript

我需要使它与负值的工作产生一个随机数的函数负,所以我可以做

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; 
} 

我怎样才能使它的工作?

+1

可能重复/ questions/1527803 /生成随机整数 - 在特定范围内的javascript –

回答

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

具体来说Math.random() * (pos + neg)返回错误的范围。如果pos = -20neg = -30,pos和neg之间的范围应该是10,但是您的操作返回-50。你也应该添加一个到范围,因为它在技术上的可能性的数量(例如:如果你想生成你的函数返回{0,1},pos和neg之间的范围是1,但有两个数字的可能性返回),并从结果中减去另一1,因为你使用Math.ceil

你的其他条款也redeclares var pos

+1

如果不清楚,这可以通过假设可生成的最低数量为0,最高为pos +负。然后,我们将负值从结果中取出,并且0 /下基底现在为负值,最高值(pos + neg)变为负值。我可能只是让它变得不那么容易理解。 –

+0

-1:您需要使用'Math.floor'来获得正确的分布,而不是'Math.ceil' – Bergi

1

基于假设你总是有第一次的小值,该代码将做技巧,请参见评论如下,不要犹豫,问!

var a=parseInt(prompt("First value")); 
 
var b=parseInt(prompt("Second value")); 
 
var result = 0; 
 

 
// Here, b - a will get the interval for any pos+neg value. 
 
result = Math.floor(Math.random() * (b - a)) + a; 
 
/* First case is we got two neg value 
 
\t * We make the little one pos to get the intervale 
 
\t * Due to this, we use - a to set the start 
 
*/ 
 
if(a < 0) { 
 
\t if(b < 0) { 
 
\t \t a = Math.abs(a); 
 
\t \t result = Math.floor(Math.random() * (a + b)) - a; 
 
\t } 
 
/* Second case is we got two neg value 
 
\t * We make the little one neg to get the intervale 
 
\t * Due to this, we use - a to set the start 
 
*/ 
 
} else { 
 
\t if(b > 0) { 
 
\t \t a = a*-1; 
 
\t \t result = Math.floor(Math.random() * (a + b)) - a; 
 
\t } 
 
} 
 
console.log("A : "+a+" | B : "+b+" | Int : "+(a+b)+"/"+Math.abs((a-b))); 
 
console.log(result);

0

你已经宣布在一开始本身的变量的POS'。那么你为什么要在“其他”部分声明呢? (var pos = b;)

因此,对于此语句, do result = Math.ceil(Math.random()*(pos + neg)) - neg;

'pos'将没有任何价值。

0

如果你想生成-50和50之间的数字 - 获取然后0和100之间的随机数减去http://stackoverflow.com 50

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

 
console.log(randomNumber);

相关问题