Go语言负数怎么转正数 Go语言负数取绝对值教程

最常用方法是math.Abs()函数取绝对值,需对整数先转float64再转回;也可用条件判断n

Go语言中把负数转成正数,最常用、最直接的方法就是用 math.Abs() 函数取绝对值。

使用 math.Abs() 获取绝对值

Go标准库 math 包提供了 Abs() 函数,支持 float64float32 类型。注意:它不直接支持整数类型(如 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,是则取反,否则保持原值
  • 适用于 intint32int64 等所有有符号整数类型

示例:

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 也完全没问题。