<Сильные> Возможные дубликаты: strong>
Случайное поплавок в PHP
Можно ли создать случайный номер поплавка от 0 до 1,0 е.г 0,4, 0,8 и т. Д. Я использовал Rand, но он принимает только целые числа.
<Сильные> Возможные дубликаты: strong>
Случайное поплавок в PHP
Можно ли создать случайный номер поплавка от 0 до 1,0 е.г 0,4, 0,8 и т. Д. Я использовал Rand, но он принимает только целые числа.
mt_getrandmax
04.01.2013 mt_rand() / mt_getrandmax();
Избегайте функции rand()
, поскольку обычно она зависит от реализации платформы C rand()
, в целом создавая числа с очень простым рисунком. Смотрите Этот комментарий на php.net
rand()
был изменен и теперь является просто псевдонимом mt_rand()
. Поэтому теперь можно использовать и rand()
.
Как насчет просто разделить на 10?
$randomFloat = rand(0, 10) / 10;
var_dump($randomFloat);
//eg. float(0.7)
rand(0, 10000) / 10000
), чтобы вызвать больше десятичных действий и, следовательно, больше случайности. 04.01.2013 $v = mt_rand() / mt_getrandmax();
сделаю это.
Если вы хотите только одно десятичное место (как в примерах от вопроса) просто round()
Значение, которое вы получаете ...
$v = round( $v, 1 );
... или рассчитать число от 0 до 10 и разделить на 10:
$v = mt_rand( 0, 10 ) / 10;
Согласно документации PHP, если вы используете PHP 7, вы можете сгенерировать криптографически безопасное псевдослучайное целое число, используя RANDUMAL_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() и имела ужасную реализацию. Я хотел изменить свой ответ, не повторяя то, что другие уже говорили, и теперь здесь мы.
Как насчет этого простого решения:
abs(1-mt_rand()/mt_rand())
or
/**
* 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
— их перестановка дает математически идентичное распределение вероятностей… 15.12.2015 Попробуй это
// 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);
}
Отбрасывать, чтобы поплавок * sup> и разделить getrandmax()
.
mt_rand(0, mt_getrandmax() - 1) / mt_getrandmax()
25.01.2013rand
используйте тот же генератор, что иmt_rand
. Однако есть другое поведение со значениями аргументов, когдаmax
меньшеmin
. 08.01.2018