写点什么

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

作者:陈明勇
  • 2023-04-16
    广东
  • 本文字数:1955 字

    阅读完需:约 6 分钟

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

作者:陈明勇

专注分享后端知识,如果本文对你有帮助,不妨点个赞,如果你是 Go 语言初学者,不妨点个关注,一起成长一起进步,如果本文有错误的地方,欢迎指出!

math 标准库

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


常用函数


如果想了解更多函数介绍和使用,可以到 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:返回 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 标准库提供了多个获取不同类型随机数的函数。


常用函数


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

小结

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


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


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

发布于: 刚刚阅读数: 4
用户头像

陈明勇

关注

一个热爱技术,喜欢专研技术的程序员。 2021-10-20 加入

公众号:Go技术干货

评论

发布
暂无评论
一文了解 Go 标准库 math 和 rand 的常用函数_Go_陈明勇_InfoQ写作社区