PHP如何rand浮点值?

时间:2016-11-30 08:47:37

标签: php

$a = floatval(0.0001);
$b = floatval(0.0009);
$c = rand($a,$b); // int(0);

如何从$a$b花车获得兰特?
$ a和$b的乘法不是解,因为我不知道点后的位数。

3 个答案:

答案 0 :(得分:2)

来自this article

在两个数字之间返回随机浮点数的优雅方法:

function random_float ($min,$max) {
   return ($min+lcg_value()*(abs($max-$min)));
}

答案 1 :(得分:0)

您可以使用大于0的值创建随机数,并将其除去。

$a = 1;
$b = 9;
$c = rand($a, $b);
$c = $c / 10000;

答案 2 :(得分:0)

另一个解决方案是计算小数位数并对由此数字驱动的数字执行rand

function count_decimals($x) {
   return strlen(substr(strrchr($x+"", "."), 1));
}

function random($min, $max, $precision = 0) {
   $decimals = max(count_decimals($min), count_decimals($max)) + $precision;
   $factor = pow(10, $decimals);
   return rand($min*$factor, $max*$factor) / $factor;
}

var_dump(random(0.001, 0.009)); // 0.004
var_dump(random(0.001, 0.009, 1)); // 0.0046
var_dump(random(0.001, 0.009, 2)); // 0.00458
var_dump(random(0.001, 0.009, 5)); // 0.00458014

我添加了$precision参数,以便您可以选择要在随机数中追加多少小数。