Возможный дубликат:
Случайное плавание в 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 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 () и имели ужасную реализацию. Я хотел изменить свой ответ, не повторяя того, что уже говорили другие, и теперь мы здесь.