PHP生成介于两个小数之间的随机小数,步长为0.5

9

我希望能够创建一个在两个小数之间以0.5为步长的随机数。

例如:0、0.5、1、1.5、2、2.5、3、3.5、4、4.5、5等。

使用PHP生成在两个小数之间的随机小数

目前,我可以生成在0和5之间的一位小数。

如何集成步长为0.5?

$min = 0;
$max = 5;
$number = mt_rand ($min * 10, $max * 10) / 10;

为什么不直接使用 mt_rand($min+$step, $max-$step) + $step 呢? - Marc B
1
我不确定我理解你的意思。你是指在最小值和最大值之间随机选择步长为0.5的数字吗?也就是说,从你的列表中选择一个数字? - 1010
1
如果步长为0.5,则输出为x.5 - Shaiful Islam
3个回答

8
这对你应该有用:

这应该对您有用:

$min = 0;
$max = 5;
echo $number = mt_rand($min * 2, $max * 2) / 2;

@Dagon,你说的“math luke”是什么意思?我不明白。 - Rizier123
2
此答案可以给一个比最小值更低的值。 - 1010
1
@1010怎么处理?那么最小值将是0、1,其中一半是0、0.5! - Rizier123
@Rizier123 如果最小值不为0,则它可能返回介于最小值/2和最大值之间的任何数字。 - 1010
1
OP说他想要“在两个小数之间创建随机数”。示例中最小值仅为0。 - 1010
显示剩余4条评论

1
更直观,少做无用的操作:

$min = 0;
$max = 5;
$step = 0.5;
// Simple for the case above.
echo $number = mt_rand($min * 2, $max * 2) * $step;

更加普遍、稍微复杂的情况
echo $number = mt_rand(floor($min / $step), floor($max / $step)) * $step;

mt_rand官方文档,以防万一。


在2019年,没有人使用mt_rand。你的方法显然会在0处失败。 - Mike Doe
  1. 没有人吗?你检查了每个人吗? :)
  2. http://sandbox.onlinephpfunctions.com/ 复制并粘贴代码。一切都完美运行。
- Valentine Shi

1
另一种可能的方法:

function decimalRand($iMin, $iMax, $fSteps = 0.5)
{
    $a = range($iMin, $iMax, $fSteps);

    return $a[mt_rand(0, count($a)-1)];
}

稍微修改一下,这段代码就可以很好地从任何类型的值数组中随机选择一个。对于这个功能,PHP有专门的 array_rand函数 - Valentine Shi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接