PHP随机 - 排除/包含/浮动/负片和其他动物

时间:2012-03-10 12:24:28

标签: php function random range

我需要在一定范围内生成一对随机数字(浮点数)。 基本上这些是[Lat,Lng]对的点(经度 - 纬度坐标)

我认为这将是非常直接的

<?php echo (rand(0,60).'.'.rand(0,99999999999999).' ||  '); // yes, a string is ok...?>

但它并没有让我控制浮点(分辨率)之后的数字 - 我需要修复它。

所以下一阶段是:

<?php echo (rand(0,60*pow(10,6)))/pow(10,6).' ||  '; //pow(10,$f) where $ is the resolution ?>

这是有效的。有点 .. 有时会产生像

这样的结果
22.212346 ||  33.134 ||  36.870757 ||  //(rare , but does happen)

但是嘿 - 坐标是-90到90(lon)和-180到180(lan) - 减去怎么样?

echo (rand(0,-180*pow(10,9)))/pow(10,9).' ||  ';

应该这样做..并且将所有组合在一起应该给我一些像

这样的随机字符串
23.0239423525 || -135.937419777

所以这个介绍之后 - 这里是我的问题。

  • 作为我的新手 - 我错过了什么吗?是否没有内置函数来生成PHP中具有负到正范围的随机浮点数?

  • 为什么上面的函数有时只会转换为3,4或5,如果它被告知返回6(我没有应用任何ABS或ROUND) - 在PHP中是否有自动舍入?如果有,如何避免呢?

  • 我注意到“随机”不是那么随机 - 生成的数字总是或多或少地在一个范围之间串联 - 彼此接近。 PHP随机是一个简单的非常非常快速的旋转计数器?

  • 如何从此生成的范围中排除范围? (或实际上和范围数组)

我知道这些是很多问题,但任何帮助/想法都会很棒! (如果第一个得到肯定回答,其余的几乎可以忽略:-)

1 个答案:

答案 0 :(得分:3)

rand()函数可以采取负最小值,所以你可以这样做:

   $num = mt_rand(-180000000, 180000000)/1000000;
   echo number_format($num, 6);

如果您想要小数点后的6个位置。

在排除范围方面,您可能需要分两步完成。首先考虑您想要的范围。假设您有3个范围可以从中生成随机数。范围1 = -180到-10,范围2 = 10 - 100,范围3 = 120 - 180.然后,您可以生成1到3的随机数,包括选择一个范围,然后生成该范围内的数字。