Golang float转int求绝对值 Golang浮点数转整数绝对值

必须先用 math.Abs 取浮点数绝对值再转 int,因为 int() 向零截断,如 int(-3.7) 得 -3;若先转 int 再取 abs 会逻辑错误。示例:int(math.Abs(-5.8)) → 5。

Go 语言中,将 float64float32 转为整数并取绝对值,需分两步:先取浮点数的绝对值(用 math.Abs),再转整数(用 int() 等类型转换)。不能直接对负浮点数做 int() 再取绝对值,否则会截断而非四舍五入,且逻辑错误。

先用 math.Abs 取浮点绝对值

Go 的 int() 是向零截断(truncation),比如 int(-3.7)-3,不是 3。所以必须先确保数值非负:

  • math.Abs(-3.7)3.7
  • math.Abs(4.2)4.2
  • 之后再转 int 才安全

再转 int:注意截断 vs 四舍五入

int(x) 永远是截断小数部分(不四舍五入):

  • int(math.Abs(3.9))3
  • int(math.Abs(-3.1))3
  • 如需四舍五入,用 int(math.Round(math.Abs(x)))

完整示例代码

以下函数把任意 float64 转成非负整数(向零截断):

func FloatToAbsInt(f float64) int {
  return int(math.Abs(f))
}

调用:
FloatToAbsInt(-5.8)5
FloatToAbsInt(2.1)2

注意事项

  • 导入 "math"
  • 如果原浮点数超出 int 范围(如 1e20),转 int 会溢出,结果不可靠;必要时加范围检查
  • float32,用 math.Abs(float64(f)) 转成 float64 再处理更稳妥

基本上就这些。核心就是:先 math.Abs,再 int(),别反了。