脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Golang - 一文带你了解Go语言标准库math和rand的常用函数

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

2022-12-19 16:12陈明勇 Golang

这篇文章主要为大家详细介绍了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 的整数部分和小数部分

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

Abs 函数

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

?
1
2
3
4
5
6
7
8
import (
    "fmt"
    "math"
)
 
func main() {
    fmt.Println(math.Abs(-3.14)) // 3.14
}

Max 函数

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

?
1
2
3
4
5
6
7
8
import (
    "fmt"
    "math"
)
 
func main() {
    fmt.Println(math.Max(1.5, 2.5)) // 2.5
}

Min 函数

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

?
1
2
3
4
5
6
7
8
import (
    "fmt"
    "math"
)
 
func main() {
    fmt.Println(math.Min(1.5, 2.5)) // 1.5
}

Ceil

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

?
1
2
3
4
5
6
7
8
9
import (
    "fmt"
    "math"
)
 
func main() {
    fmt.Println(math.Ceil(1.4)) // 2
    fmt.Println(math.Ceil(2))   // 2
}

Floor 函数

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

?
1
2
3
4
5
6
7
8
9
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 函数也能实现。 示例:

?
1
2
3
4
5
6
7
8
import (
    "fmt"
    "math"
)
 
func main() {
    fmt.Println(math.Trunc(1.4)) // 1
}

Dim 函数

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

?
1
2
3
4
5
6
7
8
9
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。 示例:

?
1
2
3
4
5
6
7
8
9
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 次幂。 示例:

?
1
2
3
4
5
6
7
8
9
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 开平方。 示例:

?
1
2
3
4
5
6
7
8
9
import (
    "fmt"
    "math"
)
 
func main() {
    fmt.Println(math.Sqrt(64)) // 8
    fmt.Println(math.Sqrt(16)) // 4
}

Cbrt 函数

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

?
1
2
3
4
5
6
7
8
9
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 参数,小数部分。 示例:
?
1
2
3
4
5
6
7
8
9
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) 设置随机种子,使得每次获取随机数的值都不一样

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

代码示例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 函数进行设置:

?
1
2
3
4
5
6
7
8
9
10
import (
    "fmt"
    "math/rand"
    "time"
)
 
func main() {
    rand.Seed(time.Now().Unix())
    fmt.Println(rand.Intn(10))
}

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

小结

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

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

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

以上就是一文带你了解Go语言标准库math和rand的常用函数的详细内容,更多关于Go语言math rand的资料请关注服务器之家其它相关文章!

原文链接:https://juejin.cn/post/7177775332194254885

延伸 · 阅读

精彩推荐
  • Golanggorm update传入struct对象,零值字段不更新的解决方案

    gorm update传入struct对象,零值字段不更新的解决方案

    这篇文章主要介绍了gorm update传入struct对象,零值字段不更新的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    qauzy16012021-05-30
  • Golanggolang 实用库gotable的具体使用

    golang 实用库gotable的具体使用

    使用gotable框架以实现在CLI命令行界面中打印表格。本文就介绍一下golang 实用库gotable的使用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    kaliarch11032021-08-12
  • GolangGolang标准库unsafe源码解读

    Golang标准库unsafe源码解读

    这篇文章主要为大家介绍了Golang标准库unsafe源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    大摩羯先生3962022-11-08
  • GolangGo实现基于RSA加密算法的接口鉴权

    Go实现基于RSA加密算法的接口鉴权

    这篇文章主要介绍了Go实现基于RSA加密算法的接口鉴权,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...

    K8sCat11802021-08-11
  • GolangGo语言文件读写操作案例详解

    Go语言文件读写操作案例详解

    这篇文章主要为大家介绍了Go语言文件读写操作案例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    山与路4142022-11-22
  • Golang深入解析Go 变量字符串与字符编码问题

    深入解析Go 变量字符串与字符编码问题

    Go的字符串是由单个字节连接起来的,Go语言的字符串的字节使用UTF-8编码标识Unicode文本,接下来通过本文给大家介绍下Go变量字符串与字符编码问题,需要的...

    富士康质检员张全蛋9102022-09-25
  • Golanggolang 切片的三种使用方式及区别的说明

    golang 切片的三种使用方式及区别的说明

    这篇文章主要介绍了golang 切片的三种使用方式及区别的说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    whatday10172021-05-31
  • Golang详解Go strconv包

    详解Go strconv包

    Go语言中strconv包实现了基本数据类型和其字符串表示的相互转换。这篇文章主要介绍了Go strconv包的相关知识,需要的朋友可以参考下...

    云崖先生12232021-01-02