как получить рандомное число из диапазона в том числе и с плавающей точкой? Decimal

Рейтинг: 2Ответов: 1Опубликовано: 07.02.2023

К примеру, есть rand(), но там только int.

А как сделать, чтобы на выходе получалось число из диапазонов таких число должно быть Decimal на выходе:

$rand = rand(1.12, 5.45); или //типа 3.82
$rand = rand(14, 20.5); или //20.10
$rand = rand(5, 8); или //2.01

Вот этот вариант не работает:

static function mt_rand_float($min, $max, $countZero = '0') {
    $countZero = +('1'.$countZero);
    $min = floor($min*$countZero);
    $max = floor($max*$countZero);
    return mt_rand($min, $max) / $countZero;
}
    
return self::mt_rand_float(1.22, 5.8); 

//mt_rand(): Argument #1 ($min) must be of type int, float given

Ответы

▲ 0Принят

Просто переведите целые в вещественные в нужный диапазон

<?php
function float_rand($min, $max){
    return $min + ($max-$min) * (float)rand() / (float)getrandmax();
}

echo float_rand(1.25, 7.3) . "\n";
echo float_rand(1.25, 7.3) . "\n";
echo float_rand(1.25, 7.3) . "\n";
echo float_rand(1.25, 7.3) . "\n";


2.4398327738931
6.1199881539075
3.1694941472819
3.1346495556108