我需要生成一个介于 -40 和 -10 以及 10 和 40 之间的随机数。所以结果可能是 25,但绝不是 -5 或 5。
我在网上看过,但解决方案似乎过于复杂。有没有办法只用一两行来做到这一点?
我需要生成一个介于 -40 和 -10 以及 10 和 40 之间的随机数。所以结果可能是 25,但绝不是 -5 或 5。
我在网上看过,但解决方案似乎过于复杂。有没有办法只用一两行来做到这一点?
Math.random() 将返回一个介于 0 和 1 之间的随机数。
创建您自己的函数以在最小和最大数字之间创建一个随机数。在最小值和最大值之间缩放一个随机数,然后由最小值偏移。
function randomBetween(min, max) {
return Math.random() * (max - min) + min;
}
生成一个介于 10 和 40 之间的数字,然后生成 1 或 0,如果为 0,则将其转换为负 1 并乘以任一结果
Math.random() * 30 + (Math.random() < 0.5 ? -40 : 10);
var n = Math.random()*62;
return n - (n < 31 ? 40 : 21);
这是 62 个不同的值,每个子范围中有 31 个,所以:
r = Math.floor(Math.random()*62);
if (r < 31) { r -= 40; } else { r -= 21; }
简短回答:
这可能很棘手,但绝对最好的方法是编写自己的函数。
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 之间)。
let random = (Math.random() - 0.5) * 2
判断值是负数还是正数的if 条件。
if (random >= 0){ /* Is Positive */ }
else { /* Is Negative */ }
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;
}
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++)
希望这有帮助:)
算法为 (rand*(max-min))+min
Math.floor(Math.random()*30)+10
和
Math.floor(Math.random()*-30)-10