golang--工具函数

获取随机数

// l :随机数下限
//u:随机数上限
//count:一次创建count个随机数
func getRandData(l, u, count int, t *testing.T) []float32 {
	var randNum []float32

	PRECISION := int32(100000) // 这个是随机数的精度和百分比,数值越大,精度越高
	min := float32(l)          // 设置随机数下限
	max := float32(u)          // 设置随机数上限

	minBool := true // 是否包含下限
	maxBool := true // 是否包含上限

	rand.Seed(time.Now().UnixNano())
	// 创建count个随机数
	for i := 0; i < count; i++ {
		// 得到百分比
		var ratio int32
		for {
			ratio = rand.Int31n(PRECISION + 1)
			// 都包含
			if minBool && maxBool {
				break
			}
			// 都不包含
			if !minBool && !maxBool && ratio != 0 && ratio != PRECISION {
				break
			}
			// 包含下限,不包含上限
			if minBool && !maxBool && ratio != PRECISION {
				break
			}
			// 包含上限,不包含下限
			if !minBool && maxBool && ratio != 0 {
				break
			}
		}

		// 计算公式(max-min)*ratio/PRECISION + min
		dec1 := decimal.NewFromFloat32(max).Sub(decimal.NewFromFloat32(min))
		dec2 := dec1.Mul(decimal.NewFromInt32(ratio))
		dec3 := dec2.Div(decimal.NewFromInt32(int32(PRECISION)))
		dec4 := dec3.Add(decimal.NewFromFloat32(min)) // 得到随机数结果

		number, _ := dec4.Float64() // 转换为number类型
		num := float32(number)      // 最终转换成自己想要的类型,得到最终结果
		fmt.Print(num, ",")
		randNum = append(randNum, num)

		if num == min {
			t.Logf("随机数等于下限---------%f \n", num)
		}
		if num == max {
			t.Logf("随机数等于上限---------%f \n", num)
		}
		// 脱离范围
		if num < min || num > max {
			t.Logf("随机数脱离范围区间-----%f \n", num)
		}
	}
	return randNum
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值