go语言math包函数参数均为float64,整数需显式转换;三角函数以弧度为单位,角度需转弧度;sqrt等函数对负输入返回nan,需预先校验。

math.Abs、Max、Min 等基础函数只接受 float64
所有 math.Abs、math.Max、math.Min、math.Pow 等函数的参数和返回值都是 float64,传入 int 或 int64 会编译报错。别指望它自动转换。
- 错误写法:
math.Max(3, 5)—— 编译失败:cannot use 3 (type int) as type float64 - 正确写法:
math.Max(3.0, 5.0)或math.Max(float64(a), float64(b)) - 整数比较建议直接用三元表达式或自定义函数,除非你本就要做浮点运算
三角函数(Sin/Cos/Tan)默认单位是弧度,不是角度
调用 math.Sin、math.Cos 前必须把角度转成弧度,否则结果完全不对。常见错误是直接传 90 想算 sin(90°),实际算的是 sin(90 弧度) ≈ sin(5157°),毫无意义。
- 角度转弧度:乘以
math.Pi / 180,例如math.Sin(90 * math.Pi / 180) - 弧度转角度:除以
math.Pi / 180,即乘以180 / math.Pi -
math.Pi是常量,不是函数,不用加括号 - 注意浮点误差:比如
math.Cos(math.Pi/2)不严格等于 0,而是约6.123e-17
Sqrt、Cbrt、Pow 等幂运算函数对输入范围敏感
math.Sqrt(-1) 不会 panic,但返回 NaN;math.Pow(-2, 0.5) 同样得 NaN;math.Log(-1) 也是 NaN。这些不是 bug,是 IEEE 754 的规定行为。
Colly 是一个用于 Go 语言的快速开源爬取和爬虫框架。它适用于从简单的页面提取到异步爬虫处理大量页面集合,支持请求回调和结构化解析。
- 开方前务必检查非负:
if x >= 0 { math.Sqrt(x) } else { /* handle error */ } -
math.Pow(x, y)在x 且 <code>y非整数时返回NaN,哪怕y是0.0或1.0也不行(因为类型仍是float64) - 需要安全开方?可用
math.Sqrt(math.Abs(x)),但要清楚这已不是数学意义上的平方根 - 判断结果是否异常:用
math.IsNaN(v)或math.IsInf(v, 0)
取整函数 Floor/Ceil/Round/Trunc 行为差异大,别混用
四个函数都返回 float64,但逻辑完全不同,尤其在负数场景下容易踩坑:
-
math.Floor(-3.7)→-4.0(向下取整,朝 -∞) -
math.Ceil(-3.7)→-3.0(向上取整,朝 +∞) -
math.Round(-3.7)→-4.0(四舍五入,.5 向偶数舍入) -
math.Trunc(-3.7)→-3.0(截断小数,等价于朝 0 取整) - 想转成整数?记得再套一层
int(math.Floor(x)),但要注意溢出风险(float64超过int64范围时)
最常被忽略的是 NaN 和 Inf 的传播性:一个 NaN 输入,基本会让后续所有 math 运算结果都变成 NaN,而程序未必立刻崩溃——可能只是某处坐标算歪、某次衰减系数变成 0,最后调试半天才发现源头是没校验 math.Sqrt 的输入。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










