Obm*_*nen 5 php random function range
我需要在一定范围内生成一对随机数字(浮点数).基本上这些是[Lat,Lng]对的点(经度 - 纬度坐标)
我认为这将是非常直接的
<?php echo (rand(0,60).'.'.rand(0,99999999999999).' || '); // yes, a string is ok...?>
Run Code Online (Sandbox Code Playgroud)
但它并没有让我控制浮点(分辨率)后的数量 - 我需要修复它.
所以下一阶段是:
<?php echo (rand(0,60*pow(10,6)))/pow(10,6).' || '; //pow(10,$f) where $ is the resolution ?>
Run Code Online (Sandbox Code Playgroud)
这很有效.有时......它会产生类似的结果
22.212346 || 33.134 || 36.870757 || //(rare , but does happen)
Run Code Online (Sandbox Code Playgroud)
但是嘿 - 坐标是-90到90(lon)和-180到180(lan) - 减去怎么样?
echo (rand(0,-180*pow(10,9)))/pow(10,9).' || ';
Run Code Online (Sandbox Code Playgroud)
应该这样做..并将所有组合在一起应该给我一个随机的字符串
23.0239423525 || -135.937419777
Run Code Online (Sandbox Code Playgroud)
所以这一介绍之后 - 这是我的问题.
作为我的新手 - 我错过了什么吗?是否没有内置函数来生成PHP中具有负到正范围的随机浮点数?
为什么上面的函数有时只会转换为3,4或5,如果它被告知返回6(我没有应用任何ABS或ROUND) - 在PHP中是否有自动舍入?如果有,如何避免它?
我注意到"随机"不是那么随机 - 生成的数字总是或多或少地在一个范围之间串联 - 彼此接近.PHP随机是一个简单的非常非常快速的旋转计数器?
如何从此生成的范围中排除范围?(或实际上和范围数组)
我知道这些是很多问题,但任何帮助/想法都会很棒!(如果第一个得到肯定回答,其余几乎可以忽略:-)
rand() 函数可能会取负数,所以也许你可以这样做:
$num = mt_rand(-180000000, 180000000)/1000000;
echo number_format($num, 6);
Run Code Online (Sandbox Code Playgroud)
如果你想要小数点后6位。
在排除某个范围方面,您可能需要分两步进行。首先考虑您确实想要的范围。假设您想要生成 3 个范围的随机数。范围 1 = -180 到 -10,范围 2 = 10 - 100 和范围 3 = 120 - 180。然后您可以生成一个从 1 到 3(含)的随机数,用它来选择一个范围,然后生成该范围内的数字。