Javascript-获取最小值和最大值范围内的随机数。两者都是互斥的

Javascript-获取最小值和最大值范围内的随机数。两者都是互斥的,javascript,random,Javascript,Random,我想知道在最小值和最大值之间生成随机浮点数的最佳方法是什么。最小值和最大值都是独占的 例如,min=-1,max=100。那么随机数可以是-0.999或99.999,但不能是-1或100 我的方法是首先生成一个介于-1(包括)和100(不包括)之间的随机数: Math.random()*(max-min)+min 如果值等于-1,则获取另一个随机数,直到它不是-1 整个事情将是: var min = -1, max = 100; var rand = min; while(rand==min)

我想知道在最小值和最大值之间生成随机浮点数的最佳方法是什么。最小值和最大值都是独占的

例如,min=-1,max=100。那么随机数可以是-0.999或99.999,但不能是-1或100

我的方法是首先生成一个介于-1(包括)和100(不包括)之间的随机数:

Math.random()*(max-min)+min

如果值等于-1,则获取另一个随机数,直到它不是-1

整个事情将是:

var min = -1, max = 100;
var rand = min;
while(rand==min)
    rand = Math.random()*(max-min)+min;

有没有更好的方法来执行此操作,这样我就不必多次运行
Math.random()

您可以先检查随机数,然后只使用不等于零的值

var min=-1,
最大值=100,
R
而(!(r=Math.random());//生成、检查并仅使用r!==0值

console.log(r*(max-min)+min)只需使用您的代码以所需的精度删除限制

var p = 0.000001; //desired precission
var min = -1+p, max = 100-p;
rand = Math.floor(Math.random()*(max-min)+min)

请仔细阅读我的问题。我想要最小和最大的独家。谢谢。这个答案比我提供的更好吗?他们几乎一样。我想避免多次运行
Math.random()
。谢谢@Shawn更好的地方在于,在最坏的情况下,它的计算量更少,即需要多次尝试才能得到一个不是
min
的数字。这并不是一个很大的改进,因为你的问题的答案是“不,没有办法在一次运行”Math.random中生成一个独占的浮点随机数“这只是一种坏习惯。这在理论上可能会产生一个无止境的循环。我认为在理论上,这种情况下无止境循环的概率只有0。@N1ckles有一个以概率0无限迭代的循环(换句话说,不是无限循环)不是一个坏的做法。偶数
while(Math.random()<0.9999)
是一个非常精细的循环,保证以概率1终止。在这种情况下,它重复两次的概率非常小,没有什么可担心的。抱歉,这只是一个例子。它应该是介于-1和100之间的任何浮点。所以它可能是0.9999999。在本例中,将p值替换为双值的javascript max precision。我认为没有其他方法可以避免多次调用Math。0.00000000000000001是最大的精度吗?最小的是
5x10^-324
,即小数点后323个零,然后将p设置为5*Math。pow(10,-324)会使这是一个正确的答案吗?