我该如何使用php的
rand()
函数或其他方法生成-0.0010至0.0010之间的随机小数?将rand()
除以最大的随机数,乘以范围并加上起始数字:
<?php
// rand()/getrandmax() gives a float number between 0 and 1
// if you multiply it by 0.002 you'll get a number between 0 and 0.002
// add the starting number -0.001 and you'll get a number between -0.001 and 0.001
echo rand()/getrandmax()*0.002-0.001;
?>
.
$val = (rand(0,20)-10)/10000;
这里使用了两个rand()函数,但我认为它的可读性十分重要。第一部分会产生-1或+1。第二部分可以是0到正负数限制之间的任何数字。
$rand = (rand(0,1)*2-1)*rand(0, 100);
echo $rand;
除非您需要在一个巨大的循环中使用大量随机数,否则您可能甚至不会注意到速度差异。我进行了一些测试(50,000次迭代),通过我的函数获取一个随机数需要约0.0004毫秒。其他替代方案时间大约为其一半,但是再次强调,除非您处于一个真正大的循环中,否则您可能更好地在其他地方进行优化。
速度测试代码:
$start = microtime();
$loopCount = 50000;
for($i=0;$i<$loopCount;$i++)
{
(0*2-1)*rand(0, 100);
}
$end = microtime();
echo "Timing: ", ((($end-$start)*1000.0)/((float)$loopCount)), " milliseconds.";
-0.001
和+0.001
之间的任何可能数字。$random = ((rand()*(0.002/getrandmax()))-0.001)
// or without paranthesis:
$random = rand()*0.002/getrandmax()-0.001
$randselect=rand(0,(array_sum($adarray)*100000000));
$cumilativevalue=0;
foreach ($adarray as $key => $value) {
$cumilativevalue=$cumilativevalue+$value*100000000;
if($randselect<$cumilativevalue){$selectedad=$key;break;}
}
生成-1到1之间的一位小数随机浮点数
$random = round((rand(0,1) - floatVal('0.'.rand(0,9).rand(0,9))), 1);