Случайное число в пределах диапазона и заданная гранулярность в Голанге - PullRequest
0 голосов
/ 10 июня 2019

Я написал следующий код для создания случайного числа от 0,0 до 10,0.

const minRand = 0
const maxRand = 10
v := minRand + rand.Float64()*(maxRand-minRand)

Однако я хотел бы установить гранулярность на 0,05, поэтому нельзя допускать использование всех цифр в качестве наименее значащего десятичного знака, только 0 и 5, например ::1004

  • значение 7.73 НЕ ДЕЙСТВИТЕЛЬНО,
  • значения 7,7 и 7,75 являются действительными.

Как я могу произвести такие числа в Go?

Ответы [ 2 ]

3 голосов
/ 10 июня 2019

Вы можете разделить на гранулярность, получить псевдослучайное целое число, а затем умножить на гранулярность, чтобы уменьшить результат.

const minRand = 8
const maxRand = 10
v := float64(rand.Intn((maxRand-minRand)/0.05))*0.05 + minRand
fmt.Printf("%.2f\n", v)

Это выведет:

8.05
8.35
8.35
8.95
8.05
9.90
....

ЕслиВы не хотите получать одну и ту же последовательность каждый раз rand.Seed(time.Now().UTC().UnixNano()).

Из документов

Seed использует предоставленное значение seed для инициализации значения по умолчаниюИсточник до детерминированного состояния.Если Seed не вызывается, генератор ведет себя так, как будто он посеян Seed (1).Значения семян, которые имеют одинаковый остаток при делении на 2 ^ 31-1, генерируют одинаковую псевдослучайную последовательность.Seed, в отличие от метода Rand.Seed, безопасен для одновременного использования.

1 голос
/ 10 июня 2019

с нижними границами

const minRand = 0
const maxRand = 10
const stepRand = 0.05

v := float64(rand.Intn((maxRand-minRand)/stepRand))*stepRand + minRand
fmt.Printf("%.2f\n", v)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...