real - Número de flotación aleatorio entre 0 y 1.0 php
real random php (7)
¿Qué hay de simplemente dividir por 10?
$randomFloat = rand(0, 10) / 10;
var_dump($randomFloat);
//eg. float(0.7)
Posible duplicado:
Flotador aleatorio en php
¿Es posible crear un número de flotación aleatorio entre 0 y 1.0, por ejemplo, 0.4, 0.8, etc. Usé rand pero solo acepta números enteros.
¿Qué tal esta simple solución?
abs(1-mt_rand()/mt_rand())
o
/**
* 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;
}
De acuerdo con la documentación de PHP, si está utilizando PHP 7, puede generar un entero pseudoaleatorio criptográficamente seguro usando random_int
Dicho esto, aquí hay una función que utiliza esto para generar un flotante aleatorio entre dos números:
function random_float($min, $max) {
return random_int($min, $max - 1) + (random_int(0, PHP_INT_MAX - 1) / PHP_INT_MAX );
}
Aunque random_int () es más seguro que mt_rand (), tenga en cuenta que también es más lento.
Una versión anterior de esta respuesta sugería que usa PHP rand (), y tuvo una implementación horrible. Quería cambiar mi respuesta sin repetir lo que otros ya habían dicho, y ahora aquí estamos.
Echar para flotar * y dividir por getrandmax()
.
Prueba esto
// 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);
}
$v = mt_rand() / mt_getrandmax();
lo haré.
En caso de que solo desee un lugar decimal (como en los ejemplos de la pregunta), simplemente round()
el valor que obtiene ...
$v = round( $v, 1 );
... o calcule un número entre 0 y 100 y divida por 10:
$v = mt_rand( 0, 100 ) / 10;
mt_rand() / mt_getrandmax();
Evite la función rand()
, ya que generalmente depende de la implementación de C rand()
la plataforma, generalmente creando números con un patrón muy simple. Ver este comentario en php.net