我编写了以下代码来创建0.0到10.0之间的随机数。
const minRand = 0
const maxRand = 10
v := minRand + rand.Float64()*(maxRand-minRand)
但是,我想将粒度设置为0.05,因此不应将所有数字都设为最低有效十进制,而应仅允许使用0和5,例如:
如何在Go中生成此类数字?
答案 0 :(得分: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方法不同,种子可以安全地同时使用。
答案 1 :(得分: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)