str_random real randomico rand mt_rand generar php random floating-point integer

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() .

* Parece que el elenco es innecesario en las reglas arbitrarias de malabarismo de tipos de PHP. Sin embargo, estaría en otros idiomas.

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