Случайное число с плавающей запятой между 0 и 1.0 php

Возможный дубликат:
Случайное плавание в php

Возможно ли создать случайное число с плавающей точкой от 0 до 1,0, например 0,4, 0,8 и т. Д. Я использовал rand, но он принимает только целые числа.

 mt_rand() / mt_getrandmax(); 

Избегайте функции rand() , поскольку она обычно зависит от реализации платформы C rand() , обычно создавая числа с очень простым шаблоном. Посмотреть этот комментарий на 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; 

как насчет этого простого решения:

 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. Однако это было бы на других языках.

Согласно документации 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 ); } 

Хотя random_int () более безопасен, чем mt_rand (), имейте в виду, что он также медленнее.

В предыдущей версии этого ответа вы предлагали использовать PHP rand () и имели ужасную реализацию. Я хотел изменить свой ответ, не повторяя того, что уже говорили другие, и теперь мы здесь.