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

简介: 本文介绍了标准库 math 和 rand 的常用函数的用法,并通过例子进行说明。math 库里虽说有最大值和最小值比较,但是形参类型必须是浮点型,如果我们想比较的是整型的最大最小值,就得自己封装函数。获取随机数时,不要忘记设置随机种子,否则多次获取到的随机数将会是一样的。

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

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

math 标准库

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

常用函数

函数 说明
Abs(x float64) float64 传入 x 参数,返回 x 的绝对值
Max(x, y float64) float64 传入 xy 参数,返回 xy 中的最大值
Min(x, y float64) float64 传入 xy 参数,返回 xy 中的最小值
Ceil(x float64) float64 传入 x 参数,返回一个大于等于 x 的最小整数值,也就是向上取整
Ceil(x float64) float64 传入 x 参数,返回一个小于等于 x 的最小整数值,也就是向下取整
Trunc(x float64) float64 传入 x 参数,返回浮点数 x 的整数部分,使用 Floor 函数也能实现
Dim(x, y float64) float64 传入 xy 参数,返回 x-y0 中最大的值
Mod(x, y float64) float64 x / y 进行取余运算 x % y
Pow(x, y float64) float64 计算 xy 次幂
Sqrt(x float64) float64 x 开平方
Cbrt(x float64) float64 x 开立方
Modf(f float64) (int float64, frac float64) 分别取出 f 的整数部分和小数部分

如果想了解更多函数介绍和使用,可以到 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:返回 xy 中的最大值。 示例:

import (
    "fmt"
    "math"
)
func main() {
    fmt.Println(math.Max(1.5, 2.5)) // 2.5
}
复制代码

Min 函数

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

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-y0 中最大的值。 示例:

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:计算 xy 次幂。 示例:

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 返回一个 0n 中(不包括 n)的 int 类型的非负伪随机数
Int31() int32 返回一个 int32 类型的非负的伪随机数
Uint32() uint32 返回一个 uint32 类型的非负的伪随机数
Int31n(n int32) int32 返回一个 0n 中(不包括 n)的 int32 类型的非负伪随机数
Int63() int64 返回一个 int64 类型的非负的伪随机数
Uint64() uint64 返回一个 uint64 类型的非负的伪随机数
Int63n(n int64) int64 返回一个 0n 中(不包括 n)的 int64 类型的非负伪随机数
Float32() float32 返回一个 0.01.0 中(不包括 1.0)的 float32 类型的非负伪随机数
Float64() float64 返回一个 0.01.0 中(不包括 1.0)的 float64 类型的非负伪随机数
Seed(seed int64) 设置随机种子,使得每次获取随机数的值都不一样

如果想了解更多函数介绍和使用,可以到 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 函数设置随机种子,将当前时间的秒数作为参数。后续多次获取随机数的值将不会一直一样。

小结

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

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

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

目录
相关文章
|
2月前
|
Shell Go API
Go语言grequests库并发请求的实战案例
Go语言grequests库并发请求的实战案例
|
18天前
|
存储 Cloud Native Shell
go库介绍:Golang中的Viper库
Viper 是 Golang 中的一个强大配置管理库,支持环境变量、命令行参数、远程配置等多种配置来源。本文详细介绍了 Viper 的核心特点、应用场景及使用方法,并通过示例展示了其强大功能。无论是简单的 CLI 工具还是复杂的分布式系统,Viper 都能提供优雅的配置管理方案。
|
21天前
|
JSON 安全 网络协议
go语言使用内置函数和标准库
【10月更文挑战第18天】
14 3
|
22天前
|
JSON 监控 安全
go语言选择合适的工具和库
【10月更文挑战第17天】
12 2
|
2月前
|
Go
go函数
go函数
33 10
|
1月前
|
Linux 编译器 Go
cgo--在Go中链接外部C库
cgo--在Go中链接外部C库
|
2月前
|
编译器 Go C++
Go to Learn Go之函数
Go to Learn Go之函数
28 0
|
2月前
|
编译器 Go 索引
Go数组、多维数组和切片(动态数组),及常用函数len(),cap(),copy(),append()在切片中的使用
本文介绍了Go语言中数组、多维数组和切片(动态数组)的基本概念和操作,包括数组的定义、初始化、访问,多维数组的定义和访问,以及切片的创建、使用和扩容。同时,还讲解了切片中常用的函数len()、cap()、copy()和append()的使用方法。
|
3月前
|
设计模式 Java 数据库连接
|
3月前
|
Go 开发者