0

我需要生成一个介于 -40 和 -10 以及 10 和 40 之间的随机数。所以结果可能是 25,但绝不是 -5 或 5。

我在网上看过,但解决方案似乎过于复杂。有没有办法只用一两行来做到这一点?

4

7 回答 7

3

Math.random() 将返回一个介于 0 和 1 之间的随机数。

创建您自己的函数以在最小和最大数字之间创建一个随机数。在最小值和最大值之间缩放一个随机数,然后由最小值偏移。

function randomBetween(min, max) {
  return Math.random() * (max - min) + min;
}
于 2013-05-24T19:23:42.927 回答
1

生成一个介于 10 和 40 之间的数字,然后生成 1 或 0,如果为 0,则将其转换为负 1 并乘以任一结果 Math.random() * 30 + (Math.random() < 0.5 ? -40 : 10);

于 2013-05-24T19:23:30.230 回答
0
var n = Math.random()*62;
return n - (n < 31 ? 40 : 21);
于 2013-05-25T07:16:07.203 回答
0

这是 62 个不同的值,每个子范围中有 31 个,所以:

r = Math.floor(Math.random()*62);
if (r < 31) { r -= 40; } else { r -= 21; }
于 2013-05-25T07:08:15.363 回答
0

简短回答:
这可能很棘手,但绝对最好的方法是编写自己的函数。

var random = (Math.random() - 0.5) * 2;

if (random >= 0){
    random = lerp(10, 40, random);
} else {
    random = lerp(-40, -10, Math.abs(random));
}

function lerp (min, max, value){
    return (1 - value) * min + value * max;
}    

解释:

为了实现您的需求,您需要遵循( 3) 三个步骤。

  1. 一个随机数(介于 -1 和 1 之间)

    let random = (Math.random() - 0.5) * 2
    
  2. 判断值是负数还是正数的if 条件。

    if (random >= 0){ /* Is Positive */ }
    else { /* Is Negative */ }
    
  3. Lerp 在您需要的值之间(如果为负,则为-40 到 -10 ,如果为正,则为10 到 40)。

    // This function interpolates between two numbers based on a normalized value (between 0 and 1)
    function lerp (min, max, value){
       return (1 - value) * min + value * max;
    }
    
    
于 2021-11-03T17:06:55.387 回答
0
for(int i=15;i<=46;i++)
{
    double random=Math.rand()*5+i; 
    int rand=(int)random;
    System.out.println(rand);

}

以上代码生成15-50之间的随机数

Math.random()*5=i  

在这种情况下,这给出了较低的值,即 15

注意:您需要从值的上键中减去 4,即如果您使用 i<=50,这将打印 no 最多 54 ,同样如果您想生成 no。b/w 50-80 使用 (int i=50;i<=76;i++)

希望这有帮助:)

于 2015-09-02T10:02:09.197 回答
-1

算法为 (rand*(max-min))+min

Math.floor(Math.random()*30)+10

Math.floor(Math.random()*-30)-10
于 2013-05-24T19:23:56.107 回答