【问题标题】:PHP random decimal between two decimals with step 0.5两位小数之间的PHP随机小数,步长为0.5
【发布时间】:2015-01-13 21:10:52
【问题描述】:

我想在两个十进制数之间创建随机数,步长为 0.5。

示例:0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, ...

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

到目前为止,我可以用一个小数点逗号生成 0 到 5 之间的数字。

如何整合step 0.5?

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

【问题讨论】:

  • 为什么不只是mt_rand($min+$step, $max-$step) + $step
  • 我不确定我理解你想要什么。你的意思是用0.5步随机选择最小值和最大值之间的数字吗?即您列表中的数字之一?
  • @MarcB 如果步长为 0.5,输出将为 x.5

标签: php random


【解决方案1】:

这应该适合你:

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

【讨论】:

  • @Dagon math luke 是什么意思?我不明白
  • @Rizier123:不是星球大战的粉丝吧?
  • 这个答案可以给出低于 min 的值
  • @1010 怎么样?那么 min 将是 0, 1 而一半是 0, 0.5 ?!
  • OP 说他想“在两个十进制数之间创建随机数”。 min 仅在示例中为 0。
【解决方案2】:

另一种可能的方式:

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

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

【讨论】:

  • 这个,稍微修改一下,可以很好地从任何类型的值数组中随机选择任何东西。有专门的array_rand PHP function
【解决方案3】:

更直观,更少不必要的操作:

$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 offical docs 以防万一。

【讨论】:

  • 没有人在 2019 年使用 mt_rand。你的方法显然会为 0 失败。
  • 1) 没人吗?大家检查了吗? :) 2) sandbox.onlinephpfunctions.com 复制并粘贴代码。一切正常。
猜你喜欢
  • 2012-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-23
  • 1970-01-01
  • 1970-01-01
  • 2018-01-25
相关资源
最近更新 更多