math/rand
中的所有整数函数都会生成非负数。
rand.Int() int // [0, MaxInt]
rand.Int31() int32 // [0, MaxInt32]
rand.Int31n(n int32) int32 // [0, n)
rand.Int63() int64 // [0, MaxInt64]
rand.Int63n(n int64) int64 // [0, n)
rand.Intn(n int) int // [0, n)
我想生成 [ - m,n] 范围内的随机数。换句话说,我想生成正数和负数的混合。
答案 0 :(得分:23)
我在Go Cookbook找到了这个示例,相当于rand.Range(min, max int)
(如果该函数存在):
rand.Intn(max - min) + min
答案 1 :(得分:5)
为了防止一遍又一遍地重复max
和package main
import (
"fmt"
"math/rand"
)
// range specification, note that min <= max
type IntRange struct {
min, max int
}
// get next random value within the interval including min and max
func (ir *IntRange) NextRandom(r* rand.Rand) int {
return r.Intn(ir.max - ir.min +1) + ir.min
}
func main() {
r := rand.New(rand.NewSource(55))
ir := IntRange{-1,1}
for i := 0; i<10; i++ {
fmt.Println(ir.NextRandom(r))
}
}
,我建议在考虑它时切换范围和随机。这是我发现按预期工作的方式:
min
Cookbook中的solution you found未能准确指定max
和<MyButton text="Search" ... />
的工作方式,但当然符合您的规范( [ - 最小,最大))。我决定将范围指定为闭区间( [ - min,max] ,而不是意味着它的边界包含在有效范围内)。与我对Cookbook描述的理解相比:
为您提供您指定的任意两个正数内的随机数(在本例中为1和6)。
(可以找到below the code snippet in the Golang Cookbook)
Cookbook的实施是一个(这当然会带来很好的公司,有很多有用的项目,乍看之下)。
答案 2 :(得分:2)
我为编写随机切片而写的一个小实用程序(非常像python范围)
代码 - https://github.com/alok87/goutils/blob/master/pkg/random/random.go
import "github.com/alok87/goutils/pkg/random"
random.RangeInt(2, 100, 5)
[3, 10, 30, 56, 67]
答案 3 :(得分:0)
答案 4 :(得分:0)
对我有用的解决方案是:
j = rand.Intn(600) - 100
其中 m 是100, n 是500,它将生成-100到499之间的数字。