如何使用php rand()
或其他方法从-0.0010到0.0010重新生成随机小数?
答案 0 :(得分:5)
将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;
?>
答案 1 :(得分:3)
$val = (rand(0,20)-10)/10000;
答案 2 :(得分:1)
这使用两个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.";
答案 3 :(得分:0)
这将在-0.001
和+0.001
$random = ((rand()*(0.002/getrandmax()))-0.001)
// or without paranthesis:
$random = rand()*0.002/getrandmax()-0.001
答案 4 :(得分:0)
$randselect=rand(0,(array_sum($adarray)*100000000));
$cumilativevalue=0;
foreach ($adarray as $key => $value) {
$cumilativevalue=$cumilativevalue+$value*100000000;
if($randselect<$cumilativevalue){$selectedad=$key;break;}
}