好的,所以我在网上找到了这个代码:
<?
$seed = floor(time()/(60*5));
srand($seed);
$item = rand(0,9);
echo $item;
?>
这将每5分钟生成一个随机数。我怎样才能使它产生到第十位?比如它可以生成5.56,而不是5?此外,我如何使它生成一个接近旧数字的数字?例如:当前数字为5.75。它会产生一个接近5.75的数字,比如5.78,而不是8.52?
谢谢,
您可以使用以下方法获得子单位精度的随机数:
$item = rand(0,999) / 100;
这会给你一些类似0.00
到9.99
的东西。
您可以通过简单地添加一个小的带符号偏移量而不是生成一个全新的数字来获得与前一个数字接近的数字,例如:
$addthing = (rand(0,10) - 5) / 100;
$item = $item + $addthing;
这将为您提供一个新的号码,该号码大约位于前一号码的0.05
以内。如果你想确保这个数字仍然在有效范围内,你必须在之后"夹紧"它。换言之,如果$item
是0.00
,而$addthing
变成-0.02
,那么结果显然是负数。
如何处理取决于您,但最简单的方法可能只是检查$item
的最终值,如果它在该范围之外,则强制它回到正确的范围。
一个好的开始片段是:
<?php
$item = rand(0,999) / 100;
echo $item . "'n";
$addthing = (rand(0,10) - 5) / 100;
$item = $item + $addthing;
if (($item < 0) || ($item > 9.99)) {
$item = $item - $addthing * 2;
}
echo $item . "'n";
?>
尽管它在功能上可能更好。请注意if
语句,它检查最终值是否在有效范围之外,并通过减去两个$addthing
值来修复此问题。实际上,这意味着如果加法会导致超出范围,它会减去它。