Intereting Posts
Добавление элементов в Zend_Paginator уже создан? Самый короткий способ проверить, содержит ли переменная положительное целое число с помощью PHP? Можно ли обернуть приложение PHP / MySQL в двоичном формате, которое может работать как автономное приложение? Поиск данных и удаление данных из текстового файла с использованием php Symfony 2.3 Расширение доктрины Gedmo для переводимого кеширования Проверка электронных писем локально с помощью mamp PHP Curl публикует файл без заголовка Установка PhantomJS на сервер Выполняются ли множественные назначения переменных по значению или ссылке? Ошибка соединения с соединением в socket_connect в php Каков надлежащий способ защиты приложения CodeIgniter 2 с аутентификацией? Сортировка массива по ключам на основе другого массива? Как сделать текстовый DIFF с помощью PHP? Looping через MySQL левое соединение в php против 2 отдельных запросов Загрузка файла на php-сервере с устройства Android

Создание случайных чисел с плавающей точкой в ​​диапазоне PHP

У меня есть код, который инициализирует объект кости следующим кодом:

public function initializeDiceSides($totalSides, $fair, $maxProbability = 100) { $maxTemp = $maxProbability; $sides = array(); for ($side = 0; $side < $totalSides; $side++) { //if we want fair dice just generate same probabilities for each side if ($fair === true) { $probability = number_format($maxProbability/$totalSides, 5); } else { //set probability to random number between 1 and half of $maxTemp $probability = number_format(mt_rand(1, $maxTemp/2), 5); //subtract probability of current side from maxtemp $maxTemp= $maxTemp- $probability; $sides[$side] = $probability; } } echo $total . '<br />'; print_r($sides); } 

над отпечатками кода:

 89 Array ( [0] => 48.00000 [1] => 13.00000 [2] => 14.00000 [3] => 9.00000 [4] => 2.00000 [5] => 2.00000 ) 

Я хочу, чтобы иметь возможность генерировать числа с плавающей точкой вместо целых чисел, я хочу иметь что-то вроде

 Array ( [0] => 48.051212 [1] => 13.661212 [2] => 14.00031 [3] => 9.156212 [4] => 2.061512 [5] => 2.00000 ) 

Простым подходом было бы использовать lcg_value и умножить его на диапазон и добавить значение min

 function random_float ($min,$max) { return ($min + lcg_value()*(abs($max - $min))); } 

Я бы просто генерировал случайные числа от 0 до 999999, а затем разделил их на 100000

Вы можете умножить переменные, которые вы mt_random в mt_random , например, на 100000, а затем разделить вывод на тот же коэффициент, чтобы получить значение float.

 function random_float($min = 0, $max = 1, $includeMax = false) { return $min + \mt_rand(0, (\mt_getrandmax() - ($includeMax ? 0 : 1))) / \mt_getrandmax() * ($max - $min); } 

Убедитесь, что значение $ maxProbability и $ totalSides – это float.
Если они являются целыми числами, результат будет набираться как целое число.