最常用方法是math.Abs()函数取绝对值,需对整数先转float64再转回;也可用条件判断n![]()
Go语言中把负数转成正数,最常用、最直接的方法就是用 math.Abs() 函数取绝对值。
使用 math.Abs() 获取绝对值
Go标准库
math包提供了Abs()函数,支持float64和float32类型。注意:它不直接支持整数类型(如int),需要先做类型转换。
- 对
float64:直接传入即可- 对
int:先转成float64,调用math.Abs(),再转回int(需注意溢出风险)示例:
package main
import (
"fmt"
"math"
)
func main() {
x := -42
absX := int(math.Abs(float64(x)))
fmt.Println(absX) // 输出:42
y := -3.14
absY := math.Abs(y)
fmt.Println(absY) // 输出:3.14
}整数类型可直接用条件判断(无需导入)
如果只是处理
int类型且逻辑简单,用三元风格的 if-else 更轻量、无类型转换开销:
- 判断是否小于 0,是则取反,否则保持原值
- 适用于
int、int32、int64等所有有符号整数类型示例:
n := -100
absN := n
if n absN = -n
}
fmt.Println(absN) // 输出:100注意边界情况:最小负值无法取正
对于有符号整数类型,存在一个特殊值无法被“取正”——比如
int8的-128,它的绝对值是128,但超出了int8的表示范围(-128 ~ 127)。
- 用
math.Abs(float64(n))转换时不会 panic,但结果可能溢出或截断(取决于后续怎么转回整型)- 手动取反(
-n)在n == math.MinInt64时会溢出(Go 中整数溢出不 panic,而是静默回绕)- 生产环境建议检查极端值,或改用更大类型(如
int64处理int32边界)基本上就这些。日常用
math.Abs()最稳妥;纯整数且追求简洁,用if n 也完全没问题。








