可能是重复问题:
php中的随机浮点数
是否有可能创建一个在0和1.0之间的随机浮点数,例如0.4、0.8等。 我使用了rand函数,但它只接受整数。
mt_rand() / mt_getrandmax();
rand()
函数,因为它通常依赖于平台的C rand()
实现,生成的数字通常具有非常简单的模式。参见php.net上的这个评论。
更新:在php 7.1中,rand()
已更改,现在只是mt_rand()
的别名。因此,现在可以使用rand()
。mt_rand(0, mt_getrandmax() - 1) / mt_getrandmax()
。 - Erick Robertsonrand
函数和mt_rand
使用相同的生成器。但是,当max
小于min
时,参数值的行为不同。 - Rolice那么仅仅将数字除以10呢?
$randomFloat = rand(0, 10) / 10;
var_dump($randomFloat);
//eg. float(0.7)
rand(0, 10000) / 10000
)以引起更多的小数和随机性。 - h2ooooooo$v = mt_rand() / mt_getrandmax();
如果您只需要保留小数点后一位(例如问题中的示例),只需对获取到的值使用round()
函数即可...
$v = round( $v, 1 );
......或计算介于0和10之间的数字并除以10:
$v = mt_rand( 0, 10 ) / 10;
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(),但实现很糟糕。我想改变我的答案,而不重复其他人已经说过的话,现在我们来到这里。
试试这个
// 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);
}
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;
}
$Min < $Max
- 交换它们会产生数学上相同的概率分布...... - Jollywatt将其转换为浮点数*,然后除以getrandmax()
。
mt_getrandmax
有一个官方示例来完成这个操作。 - Gordon