随机浮点数介于0到1.0之间

时间:2013-01-04 10:44:14

标签: php random floating-point integer

  

可能重复:
  Random Float in php

是否可以创建0到1.0之间的随机浮点数,例如0.4,0.8等。 我使用rand但它只接受整数。

7 个答案:

答案 0 :(得分:91)

mt_rand() / mt_getrandmax();

避免rand()函数,因为它通常取决于平台的C rand()实现,通常用非常简单的模式创建数字。见this comment on php.net

答案 1 :(得分:23)

如何简单地除以10?

$randomFloat = rand(0, 10) / 10;
var_dump($randomFloat);

//eg. float(0.7)

答案 2 :(得分:6)

$v = mt_rand() / mt_getrandmax();

会这样做。


如果您只想要一个小数位(如问题中的示例所示),只需round()得到的值......

$v = round( $v, 1 );

...或计算0到10之间的数字并除以10:

$v = mt_rand( 0, 10 ) / 10;

答案 3 :(得分:3)

根据PHP文档,如果您使用的是PHP 7,则可以使用random_int生成加密安全的伪随机整数

说到这里,这是一个利用它来生成两个数字之间的随机浮点数的函数:

function random_float($min, $max) {
    return random_int($min, $max - 1) + (random_int(0, PHP_INT_MAX - 1) / PHP_INT_MAX );
}

虽然random_int()比mt_rand()更安全,但请记住它也更慢。

  

此答案的先前版本建议您使用PHP rand(),并且执行起来很糟糕。我想改变我的回答而不重复别人已经说过的话,现在我们就在这里。

答案 4 :(得分:2)

这个简单的解决方案怎么样:

abs(1-mt_rand()/mt_rand()) 

/**
 * Generate Float Random Number
 *
 * @param float $Min Minimal value
 * @param float $Max Maximal value
 * @param int $round The optional number of decimal digits to round to. default 0 means not round
 * @return float Random float value
 */
function float_rand($Min, $Max, $round=0){
    //validate input
    if ($min>$Max) { $min=$Max; $max=$Min; }
        else { $min=$Min; $max=$Max; }
    $randomfloat = $min + mt_rand() / mt_getrandmax() * ($max - $min);
    if($round>0)
        $randomfloat = round($randomfloat,$round);

    return $randomfloat;
}

答案 5 :(得分:2)

试试这个

// Generates and prints 100 random number between 0.0 and 1.0 
$max = 1.0;
$min = 0.0;
for ($i = 0; $i < 100; ++$i)
{
    print ("<br>");
    $range = $max - $min;
    $num = $min + $range * (mt_rand() / mt_getrandmax());    
    $num = round($num, 2);
    print ((float) $num);
}

答案 6 :(得分:1)

施放到浮动 * 并除以getrandmax()

<小时/> *似乎在PHP的任意类型 - 杂耍规则中不需要强制转换。不过,它将使用其他语言。