如何生成随机正或负小数?

时间:2010-07-08 17:59:45

标签: php random

如何使用php rand()或其他方法从-0.0010到0.0010重新生成随机小数?

5 个答案:

答案 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;}
}