Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

mt_rand() / mt_getrandmax();

Избегайте функции rand(), поскольку она обычно зависит от реализации платформы C rand(), обычно создавая числа с очень простым шаблоном. См. этот комментарий на php.net

Ответ 2

Как насчет простого деления на 10?

$randomFloat = rand(0, 10) / 10;
var_dump($randomFloat);

//eg. float(0.7)

Ответ 3

$v = mt_rand() / mt_getrandmax();

сделаю это.


В случае, если вам нужно только одно десятичное место (как в примерах из вопроса), просто round() значение, которое вы получите...

$v = round( $v, 1 );

... или вычислите число от 0 до 10 и разделите на 10:

$v = mt_rand( 0, 10 ) / 10;

Ответ 4

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

Ответ 5

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

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;
}

Ответ 6

Попробуйте это

// 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);
}

Ответ 7

Переместить в float * и разделить на getrandmax().


* Кажется, что бросок не нужен в PHP произвольных правилах манипуляции с типом. Это было бы на других языках.