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生成随机数相关推荐

  1. golang 生成随机数

    package mainimport ("time""math/rand""fmt" )func main() {rand.Seed(tim ...

  2. Golang学习日志 ━━ (批量)循环生成随机数出现重复的解决办法

    利用纳秒作为种子,每次生成随机数都给一次种子. import ("math/rand""time" )const char = "abcdefghij ...

  3. golang如何生成随机数

    目录 如何生成随机数 示例: 未写随机数种子: 加上随机数种子后: 如何生成随机数 在go语言中,生成随机数需要先添加一个***随机数种子***,否则每次运行生成的随机数都是同样顺序的数字 rand. ...

  4. golang 字符串随机数_在Go中生成随机数和字符串

    golang 字符串随机数 While completely random is not really possible, we still can have pseudorandom numbers ...

  5. 【Golang】生成随机数,指定区间随机数

    go语言的随机数,不是真正的随机,而是根据一定的公式算法计算出来的,也称伪随机数 随机数操作都在math/rand包下 一.生成一个随机数 请注意,未设定种子数而产生的随机数是固定数,下面的代码,无论 ...

  6. golang生成随机定长的验证吗

    package mainimport ("fmt""math/rand""time" ) func RandStringByLen(n in ...

  7. 已有生成随机数函数生成扩展_如何创建没有副作用的随机数生成器函数

    已有生成随机数函数生成扩展 Must you be thinking about this title? Is that even possible? The random generator has ...

  8. Python:numpy实现生成随机数,忽略warnings

    ''' 作者:Dust ''' # 生成随机数:numpy下的random import numpy as npy import warnings warnings.filterwarnings(&q ...

  9. python自定义随机数_python:numpy.random模块生成随机数

    简介 所谓生成随机数,即按照某种概率分布,从给定的区间内随机选取一个数.常用的分布有:均匀分布(uniform distribution),正态分布(normal distribution),泊松分布 ...

  10. python random库生成伯努利随机数的方法_Python使用random模块生成随机数操作实例详解...

    本文实例讲述了Python使用random模块生成随机数操作.分享给大家供大家参考,具体如下: 今天在用Python编写一个小程序时,要用到随机数,于是就在网上查了一下关于Python生成各种随机数的 ...

最新文章

  1. Android自动化测试之Shell脚本一——模拟触屏事件
  2. html怎么写三段平行文本,试论实用文体翻译中平行文本的使用
  3. LeetCode-166- Fraction to Recurring Decimal
  4. PHP函数之CURL: 常见问题总结
  5. decimal,float和double的区别
  6. jquery easyui datagrid getSelections用法
  7. [LeetCode][Python][C#]刷题记录 26. 删除排序数组中的重复项
  8. 数据库外连接和内连接详解
  9. 使用webstorm操作git
  10. 自动弹琴助手使用及制谱教程
  11. 笔记本电脑(PC)序列号查询
  12. python星星闪烁_python实现while循环打印星星的四种形状
  13. C++提高进阶,你知道多少?
  14. CCF关于举办CSP-J1 CSP-S1 初赛的报名通知
  15. 一款 API 测试神器,非常强
  16. 三国群英传霸业之王服务器维护,20200901维护公告
  17. APP功能测试包含哪些方面?最全详细总结(教程)清晰易懂
  18. 国稻种芯百团计划行动 丰收节贸促会:袁氏高科全球新通道
  19. 尚硅谷SpringBoot核心技术篇---笔记整理2-Spring Boot入门(自用)
  20. matlab模拟二分频器,基于移位寄存器的分频器

热门文章

  1. php ios表情包,[iOS] 自定义表情包
  2. 网站都变成灰色,其实几行代码就搞定了!
  3. win10+GeForce 940mx安装cuda
  4. jmeter基础之MD5加密
  5. Jmeter 脚本中使用base64 加解密、MD5加密
  6. NSGA-II中“支配”的概念
  7. word排版之长英文单词自动换行
  8. 计算机桌面图标的使用,电脑桌面图标不见了怎么恢复 如何规范使用电脑
  9. rds的连接数_阿里云数据库RDS配置详解规格代码最大连接数IOPS
  10. 下载安装SQL server2008的步骤