首页 > 其他分享 >一文了解 Go 标准库 math 和 rand 的常用函数

一文了解 Go 标准库 math 和 rand 的常用函数

时间:2022-12-19 20:35:34浏览次数:55  
标签:rand 函数 float64 fmt Println Go math

耐心和持久胜过激烈和狂热。

哈喽大家好,我是陈明勇,今天分享的内容是在 Go 标准库 math 和 rand 的常用函数。如果本文对你有帮助,不妨点个赞,如果你是 Go 语言初学者,不妨点个关注,一起成长一起进步,如果本文有错误的地方,欢迎指出!

math 标准库

​math​​​ 标准库提供了一些 常量如 ​​int64​​​ 类型的最大值、​​float64​​ 类型的最大值等,和常用的数学计算函数。

常用函数

函数

说明

​Abs(x float64) float64​

传入 ​​x​​​ 参数,返回 ​​x​​ 的绝对值

​Max(x, y float64) float64​

传入 ​​x​​​、​​y​​​ 参数,返回 ​​x​​​ 与 ​​y​​ 中的最大值

​Min(x, y float64) float64​

传入 ​​x​​​、​​y​​​ 参数,返回 ​​x​​​ 和 ​​y​​ 中的最小值

​Ceil(x float64) float64​

传入 ​​x​​​ 参数,返回一个大于等于 ​​x​​ 的最小整数值,也就是向上取整

​Ceil(x float64) float64​

传入 ​​x​​​ 参数,返回一个小于等于 ​​x​​ 的最小整数值,也就是向下取整

​Trunc(x float64) float64​

传入 ​​x​​​ 参数,返回浮点数 ​​x​​​ 的整数部分,使用 ​​Floor​​ 函数也能实现

​Dim(x, y float64) float64​

传入 ​​x​​​、​​y​​​ 参数,返回 ​​x-y​​​ 与 ​​0​​ 中最大的值

​ Mod(x, y float64) float64​

对 ​​x / y​​​ 进行取余运算 ​​x % y​

​Pow(x, y float64) float64​

计算 ​​x​​​ 的 ​​y​​ 次幂

​Sqrt(x float64) float64​

对 ​​x​​ 开平方

​Cbrt(x float64) float64​

对 ​​x​​ 开立方

​Modf(f float64) (int float64, frac float64)​

分别取出 ​​f​​ 的整数部分和小数部分

如果想了解更多函数介绍和使用,可以到 ​​https://pkg.go.dev/math​​ 进行查看。

Abs 函数

​Abs(x float64) float64​​​:返回 ​​x​​​ 的绝对值。
示例:

import (
"fmt"
"math"
)

func main() {
fmt.Println(math.Abs(-3.14)) // 3.14
}

Max 函数

​Max(x, y float64) float64​​​:返回 ​​x​​​ 与 ​​y​​​ 中的最大值。
示例:

import (
"fmt"
"math"
)

func main() {
fmt.Println(math.Max(1.5, 2.5)) // 2.5
}

Min 函数

​Min(x, y float64) float64​​​:返回 ​​x​​​ 和 ​​y​​​ 中的最小值。
示例:

import (
"fmt"
"math"
)

func main() {
fmt.Println(math.Min(1.5, 2.5)) // 1.5
}

Ceil

​Ceil(x float64) float64​​​:返回一个大于等于 ​​x​​​ 的最小整数值,也就是向上取整。
示例:

import (
"fmt"
"math"
)

func main() {
fmt.Println(math.Ceil(1.4)) // 2
fmt.Println(math.Ceil(2)) // 2
}

Floor 函数

​Ceil(x float64) float64​​​:返回一个小于等于 ​​x​​​ 的最小整数值,也就是向下取整。
示例:

import (
"fmt"
"math"
)

func main() {
fmt.Println(math.Floor(1.4)) // 1
fmt.Println(math.Floor(1)) // 1
}

Trunc 函数

​Trunc(x float64) float64​​​:返回浮点数 ​​x​​​ 的整数部分,使用 ​​Floor​​​ 函数也能实现。
示例:

import (
"fmt"
"math"
)

func main() {
fmt.Println(math.Trunc(1.4)) // 1
}

Dim 函数

​Dim(x, y float64) float64​​​:返回 ​​x-y​​​ 与 ​​0​​​ 中最大的值。
示例:

import (
"fmt"
"math"
)

func main() {
fmt.Println(math.Dim(2.0, 1.0)) // 1
fmt.Println(math.Dim(1.0, 2.0)) // 0
}

Mod 函数

​ Mod(x, y float64) float64​​​:对 ​​x / y​​​ 进行取余运算 ​​x % y​​​。
示例:

import (
"fmt"
"math"
)

func main() {
fmt.Println(math.Mod(5.0, 3.0)) // 3
fmt.Println(math.Mod(3.0, 3.0)) // 0
}

Pow 函数

​Pow(x, y float64) float64​​​:计算 ​​x​​​ 的 ​​y​​​ 次幂。
示例:

import (
"fmt"
"math"
)

func main() {
fmt.Println(math.Pow(2, 1)) // 2
fmt.Println(math.Pow(2, 5)) // 32
}

Sqrt 函数

​Sqrt(x float64) float64​​​:对 ​​x​​​ 开平方。
示例:

import (
"fmt"
"math"
)

func main() {
fmt.Println(math.Sqrt(64)) // 8
fmt.Println(math.Sqrt(16)) // 4
}

Cbrt 函数

​Cbrt(x float64) float64​​​:对 ​​x​​​ 开立方。
示例:

import (
"fmt"
"math"
)

func main() {
fmt.Println(math.Cbrt(64)) // 4
fmt.Println(math.Cbrt(8)) // 2
}

Modf 函数

​Modf(f float64) (int float64, frac float64)​​​:分别取出 ​​f​​ 的整数部分和小数部分。

  • ​int​​ 参数,整数部分。
  • ​frac​​ 参数,小数部分。

示例:

import (
"fmt"
"math"
)

func main() {
integer, decimal := math.Modf(3.1415)
fmt.Printf("整数部分:%.f 小数部分:%.4f", integer, decimal) // 整数部分:3 小数部分:0.1415
}

rand

​rand​​ 标准库提供了多个获取不同类型随机数的函数。

常用函数

函数

说明

​Int() int​

返回一个 ​​int​​ 类型的非负的伪随机数

​Intn(n int) int​

返回一个 ​​0​​​ 到 ​​n​​​ 中(不包括 ​​n​​​)的 ​​int​​ 类型的非负伪随机数

​Int31() int32​

返回一个 ​​int32​​ 类型的非负的伪随机数

​Uint32() uint32​

返回一个 ​​uint32​​ 类型的非负的伪随机数

​Int31n(n int32) int32​

返回一个 ​​0​​​ 到 ​​n​​​ 中(不包括 ​​n​​​)的 ​​int32​​ 类型的非负伪随机数

​Int63() int64​

返回一个 ​​int64​​ 类型的非负的伪随机数

​Uint64() uint64​

返回一个 ​​uint64​​ 类型的非负的伪随机数

​Int63n(n int64) int64​

返回一个 ​​0​​​ 到 ​​n​​​ 中(不包括 ​​n​​​)的 ​​int64​​ 类型的非负伪随机数

​Float32() float32​

返回一个 ​​0.0​​​ 到 ​​1.0​​​ 中(不包括 ​​1.0​​​)的 ​​float32​​ 类型的非负伪随机数

​Float64() float64​

返回一个 ​​0.0​​​ 到 ​​1.0​​​ 中(不包括 ​​1.0​​​)的 ​​float64​​ 类型的非负伪随机数

​Seed(seed int64)​

设置随机种子,使得每次获取随机数的值都不一样

如果想了解更多函数介绍和使用,可以到 ​​https://pkg.go.dev/math/rand​​ 进行查看。

代码示例

import (
"fmt"
"math/rand"
)

func main() {
fmt.Println(rand.Int()) // 5577006791947779410
fmt.Println(rand.Intn(10)) // 7
fmt.Println(rand.Int31()) // 1427131847
fmt.Println(rand.Uint32()) // 1879968118
fmt.Println(rand.Int31n(10)) // 1
fmt.Println(rand.Int63()) // 6334824724549167320
fmt.Println(rand.Uint64()) // 9828766684487745566
fmt.Println(rand.Int63n(10)) // 8
fmt.Println(rand.Float32()) // 0.09696952
fmt.Println(rand.Float64()) // 0.30091186058528707
}

多次运行上述代码,发现获取到的随机数都是一样的,这是因为我们没有设置随机种子。可以通过 ​​Seed​​ 函数进行设置:

import (
"fmt"
"math/rand"
"time"
)

func main() {
rand.Seed(time.Now().Unix())
fmt.Println(rand.Intn(10))
}

使用 ​​Seed​​ 函数设置随机种子,将当前时间的秒数作为参数。后续多次获取随机数的值将不会一直一样。

小结

本文介绍了标准库 ​​math​​​ 和 ​​rand​​ 的常用函数的用法,并通过例子进行说明。

​math​​ 库里虽说有最大值和最小值比较,但是形参类型必须是浮点型,如果我们想比较的是整型的最大最小值,就得自己封装函数。

获取随机数时,不要忘记设置随机种子,否则多次获取到的随机数将会是一样的。

标签:rand,函数,float64,fmt,Println,Go,math
From: https://blog.51cto.com/chenmingyong/5949002

相关文章

  • django ORM查询优化,事务,ajax
    ORM查询优化,事务,ajax内容概要Q查询进阶操作ORM查询优化ORM事务操作ORM常用字段类型ORM常用字段参数ORM三种创建多对多的方式Ajax请求内容详细Q查询进阶操作,默......
  • 使用Akka、Kafka和ElasticSearch等构建分析引擎 -- good
    本文翻译自​​BuildingAnalyticsEngineUsingAkka,Kafka&ElasticSearch​​,已获得原作者SatendraKumar和网站授权。在这篇文章里,我将和大家分享一下我用Scala、Akka......
  • Django之模型层ORM事务操作、ORM常用字段及参数
    复习:1.事务的四大特性(ACID)原子性、一致性、隔离性、持久性2.相关SQL关键字 starttransaction; rollback; commit; savepoint;3.相关重要概念 脏读、幻读、......
  • Go语言入门第三节 Go 语言面向对象机制
    Go语言面向对象编程Go语言的面相对象和主流语言有很大的不同,如Go语言里是不支持继承,Go语言的接口实现也不太一样1.数据和行为的封装数据的封装定义一个结构体typeEmploye......
  • GO语言入门第五节 Go语言的并发编程
    写在前面因为并发相关的东西又多又长。。所以这个专题会分成多篇博客来写啦。。本篇文章包括携程机制,携程和线程的区别使用锁来控制并发使用通道(channel)来控制并发通道的多......
  • 马尔可夫链-Chapman-Kolmogorov方程及其n步转移概率矩阵
     马尔可夫过程:马尔可夫过程按照其状态和时间参数是否连续或者离散分为三种:1.时间和状态都离散的叫做马尔科夫链,2.时间和状态都是连续的叫做马尔科夫过程,3.时间连续,状态离散......
  • Go-16 Golang语言time时间统计
    packagemain//time时间统计import( "fmt" "log" "time")funcmain(){ println() now_t:=time.Now() fmt.Printf("currentnowtime:%v\n",now_t) t......
  • django简易图书管理系统
    图书管理系统项目前期准备在pycharm中创建新项目配置默认设置文件创建db1216库配置默认设置文件表结构设计图书表(书名(CharField),图书价格(DesimalField),图......
  • 5.1 入门整合案例(SpringBoot+Spring-data-elasticsearch) ---- good
    本节讲解SpringBoot与Spring-data-elasticsearch整合的入门案例。一、环境搭建新建maven项目,名字随意pom.xml<parent><groupId>org.springframework.boot</groupId><artifac......
  • Spring MVC异常处理详解 ExceptionHandler good
     @ControllerAdvice(basePackageClasses=AcmeController.class)publicclassAcmeControllerAdviceextendsResponseEntityExceptionHandler{@ExceptionHandler(Yo......