我需要在一定范围内生成一对随机数字(浮点数)。 基本上这些是[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随机是一个简单的非常非常快速的旋转计数器?
如何从此生成的范围中排除范围? (或实际上和范围数组)
我知道这些是很多问题,但任何帮助/想法都会很棒! (如果第一个得到肯定回答,其余的几乎可以忽略:-)
答案 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的随机数,包括选择一个范围,然后生成该范围内的数字。