math 库中常用的数学运算和常量【GO 基础】

〇、关于 math

GO 语言的 math 库是一个内置的标准库,其中包含了许多数学函数和常量,用于计算各种数学运算和统计学计算。

日常开发中,计算当然是少不了的,那么今天来梳理下备查。

一、测试示例

1.1 小数位的:Round-四舍五入、RoundToEven-四舍/五至偶数

func Round(x float64 ) float64func RoundToEven(x float64 ) float64

如下测试代码和结果:

复制代码
package main

import (
	"fmt"
	"math"
)

func main() {
	fmt.Printf("math.Round(3.4):%v\n", math.Round(3.4))
	fmt.Printf("math.Round(3.5):%v\n", math.Round(3.5))
	fmt.Printf("math.Round(3.6):%v\n", math.Round(3.6))
	// fmt.Printf("math.RoundToEven(3.5): %f\n", math.RoundToEven(3.4))
	// fmt.Printf("math.RoundToEven(4.5): %f\n", math.RoundToEven(4.4))
	fmt.Printf("math.RoundToEven(3.5): %f\n", math.RoundToEven(3.5))
	fmt.Printf("math.RoundToEven(4.5): %f\n", math.RoundToEven(4.5))
	// %f 输出精度格式:%总位数.小数位数f  // 默认为六位小数
}

1.2 小数位的:ceil-进一法、Floor-去尾法、Trunc-取整数部分

func Ceil(x float64 ) float64

func Floor(x float64 ) float64

func Trunc(x float64 ) float64

复制代码
package main

import (
	"fmt"
	"math"
)

func main() {
	fmt.Println(math.Ceil(1.4))
	fmt.Println(math.Ceil(1.8))
	fmt.Println(math.Floor(1.4))
	fmt.Println(math.Floor(1.8))
	fmt.Println(math.Trunc(1.4))
	fmt.Println(math.Trunc(1.8))
}

1.3 Mod-取余、取整、Remainder-距离整除差值、Modf-分别取整数和小数部分

先看下除法运算,结果的值的精度依赖于被除数。当被除数为整数,则结果自动取整;当被除数为 float32,结果默认为带七位小数的浮点数;若为 float64 则结果保留16 位小数。如下示例:

复制代码
package main

import (
	"fmt"
)

func main() {
	result_int := 8 / 3
	result_float := float32(8) / 3
	fmt.Printf("int  : %v\n", result_int)
	fmt.Printf("float: %v\n", result_float)

	float_a := 7.7 // 默认为:float64
	float_b := 3.3
	fmt.Println("a/b-32         :", float32(float_a)/float32(float_b)) // float32 默认保留 7 位
	fmt.Println("a/b-64         :", float_a/float_b) // float64 默认保留 16 位
	num2 := fmt.Sprintf("%.5f", float_a/float_b) // 手动指定保留 5 位
	fmt.Println("指定保留5位小数:", num2)
}

取整和取余

复制代码
package main

import (
	"fmt"
)

func main() {
	// 取整
	result_int := 8 / 3
	fmt.Printf("%v\n", result_int) // 输出:2
	// 取余
	int_a := 7
	int_b := 4
	fmt.Println(int_a % int_b) // 输出:3 // 百分号 % 用来取余数,只能用于整数之间
}

采用 func Mod(x, y float64 ) float64取余:

复制代码
package main

import (
	"fmt"
	"math"
)

func main() {
	fmt.Println(math.Mod(7, 4))
	fmt.Println(math.Mod(7.2, 4))
	fmt.Println(math.Mod(7, 4.1))
	fmt.Println(math.Mod(7.2, 4.1))
}

通过 func Remainder(x, y float64) float64计算整除剩余值:

复制代码
package main

import (
	"fmt"
	"math"
)

func main() {
	fmt.Println(math.Remainder(7, 4))
	fmt.Println(math.Remainder(7.2, 4))
	fmt.Println(math.Remainder(7, 4.1))
	fmt.Println(math.Remainder(7.2, 4.1))
}

通过func Modf(f float64) (int float64, frac float64)取整数和小数部分:

复制代码
package main

import (
	"fmt"
	"math"
)

func main() {
	intv, frac := math.Modf(3.14)
	fmt.Println(intv)
	fmt.Printf("%f", frac)
}

1.4 Max-最大值、Min-最小值

func Max(x, y float64 ) float64

func Min(x, y float64 ) float64

复制代码
package main

import (
	"fmt"
	"math"
)

func main() {
	fmt.Println(math.Max(1.5, 4.5))
	fmt.Println(math.Max(-1.5, -4.5))
	fmt.Println(math.Min(1.5, 4.5))
	fmt.Println(math.Min(-1.5, -4.5))
}

1.5 Dim-差的绝对值(标准差)

func Dim(x, y float64 ) float64

复制代码
package main

import (
	"fmt"
	"math"
)

func main() {
	fmt.Println(math.Dim(-1.4, -4))
	fmt.Println(math.Dim(-0.4, -40))
}

1.6 Abs-绝对值、Sqrt-平方根、Cbrt-立方根、Pow-数值的 n 次方、Pow10-10 的 n 次方

func Abs(x float64 ) float64

func Sqrt(x float64) float64

func Cbrt(x float64) float64

func Pow(x, y float64 ) float64

func Pow10(n int) float64

复制代码
package main

import (
	"fmt"
	"math"
)

func main() {
	fmt.Println(math.Abs(-1.4))
	fmt.Println(math.Sqrt(9))
	fmt.Println(math.Cbrt(8))
	fmt.Println(math.Pow(2, 2))
	fmt.Println(math.Pow(2, 3))
	fmt.Println(math.Pow10(2)) // 输出:100
}

1.7 NaN-取一个非数字的值、IsNaN-判断值是否为非数字

func NaN() float64

func IsNaN(f float64) (is bool)

复制代码
package main

import (
	"fmt"
	"math"
)

func main() {
	fmt.Println(math.IsNaN(-1.4))
	nan := math.NaN()
	fmt.Println(math.IsNaN(nan))
}

1.8 Signbit-判断值是负数,0 或正数返回 false

func Signbit(x float64) bool

复制代码
package main

import (
	"fmt"
	"math"
)

func main() {
	fmt.Println(math.Signbit(-1))
	fmt.Println(math.Signbit(0))
	fmt.Println(math.Signbit(1))
}

二、math 中的数学常量

如下常用的数学常量示例:

复制代码
package main

import (
	"fmt"
	"math"
)

func main() {
	fmt.Println(math.Pi)
	fmt.Println(math.E)
	fmt.Println(math.Inf(-1))
	fmt.Println(math.Inf(0))
	fmt.Println(math.NaN())
}

其他常用数学常量还有:

  • MaxInt8、MaxInt16、MaxInt32、MaxInt64:表示各种整数类型的最大值。
  • MinInt8、MinInt16、MinInt32、MinInt64:表示各种整数类型的最小值。
  • MaxFloat32、MaxFloat64:表示各种浮点数类型的最大值。
  • MinFloat32、MinFloat64:表示各种浮点数类型的最小值。

参考:https://golang.google.cn/pkg/math/

相关推荐
用户743835613519 小时前
无锁 Hub:我的 IM 系统为什么用 channel 而不是 mutex 管理在线用户
go
吴佳浩1 天前
Go史上最大“打脸”现场来了:泛型方法终于实现了
后端·go
明月_清风2 天前
深入 Go 并发编程:从 Goroutine 到 Channel 的系统性避坑指南
后端·go
用户34232323763172 天前
开源!Go+Wails+Vue3 手搓一个 PLC 实时监控桌面工具
go
止语Lab2 天前
为什么你的 Go TCP server P99 延迟这么高
go
Andy Dennis3 天前
nsq学习记录
消息队列·go·nsq
韦胖漫谈IT3 天前
选语言不是站队,是选适合问题的工具
java·python·ai·rust·go·技术落地
喵个咪3 天前
GoWind Toolkit Go后端代码生成 完整全流程实战
后端·go·orm
夜悊3 天前
Go网络编程的学习代码示例:客户端/服务端(C/S)模型
go