Как сделать Random.Range () шагом на определенную величину? - PullRequest
0 голосов
/ 09 июля 2019

это очень простой вопрос, но я не мог найти, как его решить.Допустим, у меня есть эта строка:

Random.Range(2,4);

Я хочу, чтобы это генерировало не только целые числа, но и половинки.Я имею в виду, что шаг должен быть 0,5.Я хочу, чтобы он выбирал случайным образом только из следующих: 2, 2,5, 3, 3,5 Я не хочу никаких других десятичных чисел.Может ли кто-нибудь помочь?

Ответы [ 2 ]

2 голосов
/ 09 июля 2019

Это простое решение для вашего конкретного случая.

var randomNumber = ((float)Random.Range(4, 8)) * 0.5f;

Вы также можете расширить метод для работы с различными значениями.

public float GetRandomFloat(int min, int max, float value = 0.5f)
{
    int multipliedMin = (int) (max / value);
    int multipliedMax = (int) (max / value);

    return ((float) Random.Range(multipliedMin, multipliedMax)) * value;
}
0 голосов
/ 09 июля 2019

Класс System.Random не имеет нужной вам функции, вы можете создать собственный метод или расширение для него

метод

// use only one instance of System.Random to avoid getting duplicates
  static System.Random ra = new Random();
  static double GenRnadNum(int min,int max,double step)
        {
           //  calc the max-min and round down
            int n = (int)((max - min) / step);
            int r=  ra.Next(0, n);
            return min + r * step;
        }

пример использования dd.Add(GenRnadNum(5, 20, 0.7));

я вижу, что многие люди делают это, деля максимальное и минимальное на шаг (max / step, min / step), а затем умножая случайный результат на шаг (randomRestul * step), но это приведет к неправильным результатам, напримерmin = 2, max = 4, step = 0.3 может дать вам 2.4 с этим алгоритмом (2 / 0.3 = 6.66 -> 7, случайный результат = 8, 8 * 0.3 = 2.4)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...