math.Abs 是 go 中 math 包计算 float64 绝对值的函数,不支持 int 或 float32,需显式转换;处理 NaN 和无穷大符合 IEEE 754 标准;整数常用可 封装 AbsInt 等辅助函数。

math.Abs 是 Go 标准库 math 包中用于计算数值绝对值的函数,它不处理复数,只支持 float64 类型输入,返回值也是 float64。如果你传入整数(如 int),需要先显式转换为 float64,否则编译报错。
math.Abs 只接受 float64,不支持 int 或 float32
Go 的类型系统很严格,math.Abs 函数签名是:
func Abs(x float64) float64
这意味着:
- 传
int会报错:cannot use …… (type int) as type float64 in argument to math.Abs - 传
float32也会报错:cannot use …… (type float32) as type float64 - 正确做法是手动转成
float64,例如:math.Abs(float64(-42))→42.0
常见用法示例:处理整数、小数和边界值
实际写代码时,多数场景是处理整数或带符号浮点数:
立即学习“go 语言免费学习笔记(深入)”;
-
math.Abs(float64(-10))→10.0 -
math.Abs(3.14159)→3.14159 -
math.Abs(-0.0)→0.0(-0.0 的绝对值仍是 0.0) -
math.Abs(math.Inf(-1))→+Inf(负无穷大取绝对值得正无穷)
注意 NaN 和特殊浮点值的行为
math.Abs 对非数字(NaN)和无穷大有明确定义:
-
math.Abs(math.NaN())返回NaN -
math.Abs(math.Inf(1))→+Inf -
math.Abs(math.Inf(-1))→+Inf - 这些行为符合 IEEE 754 标准,无需额外判断,可直接使用
想对 int 直接取绝对值?自己封装更方便
频繁处理整数时,每次写 float64(x) 很啰嗦。推荐按需封装:
- int 版:
func AbsInt(x int) int {if x - int64 版:
func AbsInt64(x int64) int64 {if x - 避免用
math.Abs转换再转回 int,既低效又可能因浮点精度丢值(比如超大 int64)
基本上就这些。记住核心:math.Abs 是 float64 专用,整数要自己转或自定义函数,不复杂但容易忽略类型匹配。
以上就是golang math.Abs 怎么用 Golang