0和1.0之间的随机浮动数字php

可能重复:
随机漂浮在PHP中

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

 mt_rand() / mt_getrandmax(); 

避免使用rand()函数,因为它通常依赖于平台的C rand()实现,通常使用一个非常简单的模式创build数字。 在php.net上看到这个评论

那简单地除以10呢?

 $randomFloat = rand(0, 10) / 10; var_dump($randomFloat); //eg. float(0.7) 
 $v = mt_rand() / mt_getrandmax(); 

会做到这一点。


如果你只想要一个小数位(就像问题中的例子一样),只需round()你得到的值…

 $v = round( $v, 1 ); 

…或者计算0到100之间的数字并除以10:

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

这个简单的解决scheme如何:

 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; } 

尝试这个

 // 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); } 

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


*在PHP的任意types的杂耍规则中,似乎不需要强制转换。 尽pipe如此,这将是其他语言。

根据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 ); } 

尽piperandom_int()比mt_rand()更安全,但请记住它也比较慢。

此答案的以前版本build议您使用PHP rand(),并有一个可怕的实现。 我想改变我的答案,而不重复别人已经说过的,现在我们在这里。