diff --git a/ItemRoulette/ItemRoulette.php b/ItemRoulette/ItemRoulette.php index ac77bb4..0b1347b 100644 --- a/ItemRoulette/ItemRoulette.php +++ b/ItemRoulette/ItemRoulette.php @@ -6,21 +6,22 @@ class ItemRoulette private array $items; /** - * Рассчёт количества знаков после запятой у значения подаваемого на вход. + * Рассчёт верхнего значения диапазона, подаваемого на рандомизатор через + * множитель в зависимости от количества знаков после запятой у значения подаваемого на вход, умноженный на это значение. * Если на вход идёт целое число, система возвратит 0; * Если на вход идёт дробное число, система вернёт количество знаков; * Если на вход идёт вообще не число, система всё равно вернёт 0; * * @param $num - * @return int количество знаков после запятой. + * @return int множитель. */ - private function countDecimals($num): int + private function randMax($num): int { if ((int)$num == $num || !is_numeric($num)) { return 0; } list(, $a) = explode('.', strval($num)); - return strlen($a); + return $num * pow(10, strlen($a)); } /** @@ -36,16 +37,10 @@ class ItemRoulette private function roll(): string { $sumOfPercents = 0; - $multiplier = 1; foreach ($this->items as $itemsPercent) { $sumOfPercents += $itemsPercent; } - $cd = $this->countDecimals($sumOfPercents); - for ($i = 0; $i < $cd; $i++) { - $multiplier *= 10; - } - $sumOfPercents *= $multiplier; - $rand = mt_rand(1, (int)$sumOfPercents); + $rand = mt_rand(1, $this->randMax($sumOfPercents)); $rangeStart = 1; foreach ($this->items as $itemKey => $itemsPercent) { $rangeFinish = $rangeStart + ($itemsPercent * $multiplier);