Math.trunc() 直接截去小数部分,不四舍五入、不向任何方向取整;Math.floor() 总是向下取整(朝负无穷方向),故对负数结果不同:如 Math.trunc(-3.9) 为 -3,Math.floor(-3.9) 为 -4。

Math.trunc() 直接截掉小数部分,只保留整数位,不四舍五入、不向任何方向取整;而 Math.floor() 总是向下取整(即朝负无穷方向),两者在负数时行为明显不同。
Math.trunc() 的核心行为
它不做任何数学意义上的“舍入”,只是简单地移除小数点后的所有数字,相当于“砍掉尾巴”:
- Math.trunc(3.9) → 3
- Math.trunc(-3.9) → -3(不是 -4!)
- Math.trunc(0.1) → 0,Math.trunc(-0.1) → 0
Math.floor() 在负数下的表现
它始终返回**小于或等于原数的最大整数**,因此对负数会变得更小:
- Math.floor(3.9) → 3
- Math.floor(-3.9) → -4(因为 -4
- Math.floor(-0.1) → -1(不是 0)
什么场景该选 Math.trunc()?
当你需要纯粹去掉小数部分、保持符号不变时,比如:
- 解析用户输入的带小数的数字,只关心整数编号(如 ID=123.789 → 取 123)
- 坐标或像素值转换中避免负方向偏移(如 canvas 绘图时
trunc(-2.8)得 -2,而floor(-2.8)会错位到 -3) - 实现类似 C/Python 中
(int)x的强制截断语义
快速对比记忆口诀
✅ trunc = truncate(截断)→ 去尾,不看正负
✅ floor = 向下(更小)→ 负数变大负数(-3.1 → -4)










