Math.trunc() 是向零截断小数部分的专用方法:对正负数均直接去掉小数,如 Math.trunc(12.8) 返回 12、Math.trunc(-12.8) 返回 -12,不四舍五入、不向下取整,与 Math.floor 在负数时行为不同。

Math.trunc() 是 ES6 引入的专门用于“截断小数部分、保留整数部分”的方法,它不进行四舍五入,也不向下取整(floor),而是简单粗暴地去掉小数点后的所有数字,只留下整数部分。它和 Math.floor() 的行为在正数时看似一样,但在负数时有本质区别。
Math.trunc 与 Math.floor 的关键区别
很多人误以为 Math.trunc() 就是 Math.floor() 的替代品,其实不是:
-
Math.trunc(3.7)→ 3(和Math.floor(3.7)相同) -
Math.trunc(-3.7)→ -3(而Math.floor(-3.7)→ -4)
也就是说:trunc 是向零取整(truncate toward zero),floor 是向负无穷取整。如果你的目标是“单纯拿掉小数部分”,无论正负,Math.trunc() 才是正确选择。
直接使用 Math.trunc 截取浮点数整数部分
用法非常简单,传入任意数字即可:
立即学习“Java免费学习笔记(深入)”;
-
Math.trunc(123.456)→ 123 -
Math.trunc(-98.99)→ -98 -
Math.trunc(0.999)→ 0 -
Math.trunc(NaN)→ NaN(安全,不报错)
兼容性与降级方案(需支持旧浏览器时)
IE 完全不支持 Math.trunc(),如需兼容,可用以下等效逻辑手动实现:
- 对非 NaN 数字:
Math.trunc = (x) => x - 或更简洁写法:
Math.trunc = (x) => x | 0;(仅适用于安全整数范围内的数值,即 -2³¹ ~ 2³¹−1,超出可能出错)
注意:| 0 利用了位运算的隐式转换,虽快但会丢失超大数精度,生产环境推荐用第一种条件判断方式。
常见误用提醒
别把它当四舍五入或取整工具用:
- ❌
Math.trunc(2.5)得到 2,不是 3 —— 它不做任何舍入 - ❌ 不适合代替
parseInt()处理字符串,因为Math.trunc("2.5")返回 NaN(它不自动转类型);应先Number("2.5")再 trunc - ✅ 正确用法:
Math.trunc(Number("2.5"))→ 2


















