0

我编写了以下代码来创建一个介于 0.0 和 10.0 之间的随机数。

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

但是,我想将粒度设置为 0.05,因此不允许将所有数字作为最低有效小数,只允许 0 和 5,例如:

  • 值 7.73 无效,
  • 值 7.7 和 7.75 是有效的。

我怎样才能在 Go 中产生这样的数字?

4

2 回答 2

3

您可以按粒度除,得到一个伪随机整数,然后乘以粒度以缩小结果。

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 使用提供的种子值将默认 Source 初始化为确定性状态。如果未调用 Seed,则生成器的行为就像由 Seed(1) 播种一样。除以 2^31-1 时具有相同余数的种子值生成相同的伪随机序列。与 Rand.Seed 方法不同,Seed 可以安全地同时使用。

于 2019-06-10T15:01:05.993 回答
1

有下界

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

v := float64(rand.Intn((maxRand-minRand)/stepRand))*stepRand + minRand
fmt.Printf("%.2f\n", v)
于 2019-06-10T15:39:06.027 回答