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(),并有一个可怕的实现。 我想改变我的答案,而不重复别人已经说过的,现在我们在这里。