golang生成随机数
1.通过math/rand包生成随机数
今天刚完成了一个业务模块,是用golang生成各种类型,且指定范围的随机数,还要可选择是否包含上下限,还要能控制随机数的精度,今天刚做完,迫不及待记录一下。
1.1整数类型随机数:
rand.Seed():设置一个具体的值,随便给个值都可以,golang是通过这个函数设置的值来生成随机数,但是有个问题,如果值是固定的,那么生成的随机数也是固定的,也就是说生成的是伪随机数,不是真随机数,所以最方便的办法就是把时间戳设置进去,因为获取的时间戳不是固定的。
如果是整数类型的随机数,这样就行了,也是写起来最简单的一种方法,其他整数类型同理,改一下rand的函数就行,比如生成int64的,改成rand.Int63n()函数就行,但此方法仅限于整数类型的随机数。
//生成随机数min := int32(-10) //设置随机数下限max := int32(100) //设置随机数上限rand.Seed(time.Now().UnixNano())//创建100个随机数for i := 0; i < 100; i++ {//不包含上下限num := rand.Int31n(max-min-1) + min + 1//包含上下限// num := rand.Int31n(max-min) + minfmt.Print(num, ",")if num == min {fmt.Println("随机数等于下限---------", num)}if num == max {fmt.Println("随机数等于上限---------", num)}//脱离范围if num < min || num > max {fmt.Println("随机数脱离范围区间-----", num)}}
1.2浮点类型随机数:
rand.Float32():rand自带的生成一个0与1之间float32类型的随机数
rand.Float64():rand自带的生成一个0与1之间float64类型的随机数
通过rand自带函数,再加上下面设置的上下限运算,就能够生成浮点类型随机数,但是这种方式只能生成不包含上下限的随机数,包含上下限的生成不了,而且不能控制精度。
//生成随机数min := float32(-10.5) //设置随机数下限max := float32(100.05) //设置随机数上限rand.Seed(time.Now().UnixNano())//创建100个随机数for i := 0; i < 100; i++ {//这种方式,浮点类型不能做到包含上下限num := rand.Float32()*(max-min) + minfmt.Print(num, ",")if num == min {fmt.Println("随机数等于下限---------", num)}if num == max {fmt.Println("随机数等于上限---------", num)}//脱离范围if num < min || num > max {fmt.Println("随机数脱离范围区间-----", num)}}
1.3用decimal与rand搭配,生成任意类型随机数:
这种方式,可生成任意类型随机数,也都可以包含上下限,还能自己控制精度,推荐这种方式
//生成随机数PRECISION := int32(1000000000) //这个是随机数的精度和百分比,数值越大,精度越高min := float32(-10.5) //设置随机数下限max := float32(100.05) //设置随机数上限minBool := true //是否包含下限maxBool := true //是否包含上限rand.Seed(time.Now().UnixNano())//创建100个随机数for i := 0; i < 100; i++ {//得到百分比var ratio int32for {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 + mindec1 := 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, ",")if num == min {fmt.Println("随机数等于下限---------", num)}if num == max {fmt.Println("随机数等于上限---------", num)}//脱离范围if num < min || num > max {fmt.Println("随机数脱离范围区间-----", num)}}
golang生成随机数相关推荐
- golang 生成随机数
package mainimport ("time""math/rand""fmt" )func main() {rand.Seed(tim ...
- Golang学习日志 ━━ (批量)循环生成随机数出现重复的解决办法
利用纳秒作为种子,每次生成随机数都给一次种子. import ("math/rand""time" )const char = "abcdefghij ...
- golang如何生成随机数
目录 如何生成随机数 示例: 未写随机数种子: 加上随机数种子后: 如何生成随机数 在go语言中,生成随机数需要先添加一个***随机数种子***,否则每次运行生成的随机数都是同样顺序的数字 rand. ...
- golang 字符串随机数_在Go中生成随机数和字符串
golang 字符串随机数 While completely random is not really possible, we still can have pseudorandom numbers ...
- 【Golang】生成随机数,指定区间随机数
go语言的随机数,不是真正的随机,而是根据一定的公式算法计算出来的,也称伪随机数 随机数操作都在math/rand包下 一.生成一个随机数 请注意,未设定种子数而产生的随机数是固定数,下面的代码,无论 ...
- golang生成随机定长的验证吗
package mainimport ("fmt""math/rand""time" ) func RandStringByLen(n in ...
- 已有生成随机数函数生成扩展_如何创建没有副作用的随机数生成器函数
已有生成随机数函数生成扩展 Must you be thinking about this title? Is that even possible? The random generator has ...
- Python:numpy实现生成随机数,忽略warnings
''' 作者:Dust ''' # 生成随机数:numpy下的random import numpy as npy import warnings warnings.filterwarnings(&q ...
- python自定义随机数_python:numpy.random模块生成随机数
简介 所谓生成随机数,即按照某种概率分布,从给定的区间内随机选取一个数.常用的分布有:均匀分布(uniform distribution),正态分布(normal distribution),泊松分布 ...
- python random库生成伯努利随机数的方法_Python使用random模块生成随机数操作实例详解...
本文实例讲述了Python使用random模块生成随机数操作.分享给大家供大家参考,具体如下: 今天在用Python编写一个小程序时,要用到随机数,于是就在网上查了一下关于Python生成各种随机数的 ...
最新文章
- Android自动化测试之Shell脚本一——模拟触屏事件
- html怎么写三段平行文本,试论实用文体翻译中平行文本的使用
- LeetCode-166- Fraction to Recurring Decimal
- PHP函数之CURL: 常见问题总结
- decimal,float和double的区别
- jquery easyui datagrid getSelections用法
- [LeetCode][Python][C#]刷题记录 26. 删除排序数组中的重复项
- 数据库外连接和内连接详解
- 使用webstorm操作git
- 自动弹琴助手使用及制谱教程
- 笔记本电脑(PC)序列号查询
- python星星闪烁_python实现while循环打印星星的四种形状
- C++提高进阶,你知道多少?
- CCF关于举办CSP-J1 CSP-S1 初赛的报名通知
- 一款 API 测试神器,非常强
- 三国群英传霸业之王服务器维护,20200901维护公告
- APP功能测试包含哪些方面?最全详细总结(教程)清晰易懂
- 国稻种芯百团计划行动 丰收节贸促会:袁氏高科全球新通道
- 尚硅谷SpringBoot核心技术篇---笔记整理2-Spring Boot入门(自用)
- matlab模拟二分频器,基于移位寄存器的分频器