必须先用 math.Abs 取浮点数绝对值再转 int,因为 int() 向零截断,如 int(-3.7) 得 -3;若先转 int 再取 abs 会逻辑错误。示例:int(math.Abs(-5.8)) → 5。
Go 语言中,将 float64 或 float32 转为整数并取绝对值,需分两步:先取浮点数的绝对值(用 math.Abs),再转整数(用 int() 等类型转换)。不能直接对负浮点数做 int() 再取绝对值,否则会截断而非四舍五入,且逻辑错误。
Go 的 int() 是向零截断(truncation),比如 int(-3.7) 得 -3,不是 3。所以必须先确保数值非负:
math.Abs(-3.7) → 3.7
math.Abs(4.2) → 4.2
int 才安全int(x) 永远是截断小数部分(不四舍五入):
int(math.Abs(3.9)) → 3
int(math.Abs(-3.1)) → 3
int(math.Round(math.Abs(x)))
以下函数把任意 float64 转成非负整数(向零截断):
调用:FloatToAbsInt(-5.8) → 5FloatToAbsInt(2.1) → 2

"math" 包int 范围(如 1e20),转 int 会溢出,结果不可靠;必要时加范围检查float32,用 math.Abs(float64(f)) 转成 float64 再处理更稳妥基本上就这些。核心就是:先 math.Abs,再 int(),别反了。