Math.trunc() 是 JavaScript 中用于直接截去小数部分、统一向零取整的方法,对正负数均砍掉小数位;它先转数字再截断,支持字符串、null等输入,NaN 和 undefined 转换后保持对应结果。

Math.trunc() 是 JavaScript 中专门用于“直接去掉小数部分、只保留整数部分”的数学方法,它不四舍五入、不向零取整(它就是向零取整)、也不考虑正负号的舍入规则——它只是简单粗暴地砍掉小数点后面所有内容。
和 Math.floor / Math.ceil / Math.round 的区别
这是最容易混淆的地方:
- Math.trunc(-3.7) → -3(砍掉 .7,剩下 -3)
- Math.floor(-3.7) → -4(向下取整,即更小的整数)
- Math.ceil(-3.7) → -3(向上取整,即更大的整数)
- Math.round(-3.7) → -4(四舍五入,.7 ≥ .5,所以进一位)
可以看到,只有 trunc 对正负数都统一“去尾”,行为最直观、最符合“截断”字面意思。
支持的参数类型与边界情况
Math.trunc() 会先尝试把参数转成数字,再截断:
立即学习“Java免费学习笔记(深入)”;
- Math.trunc(123.456) → 123
- Math.trunc("-45.9") → -45(字符串自动转数字)
- Math.trunc(NaN) → NaN
- Math.trunc(Infinity) → Infinity
- Math.trunc(null) → 0(null 转数字是 0)
- Math.trunc(undefined) → NaN(undefined 转数字是 NaN)
实际使用建议
当你明确只需要“拿掉小数点后所有内容”,比如处理坐标像素值、数组索引计算、或解析用户输入的带小数的整数字段时,Math.trunc 比写 Math.floor(x 或 <code>x 更简洁安全。
- 替代手动取整逻辑:用 Math.trunc(x) 替代 ~~x(双按位非),后者在大数或非安全整数时可能出错
- 注意兼容性:IE 不支持,如需兼容可加简易 polyfill:Math.trunc = Math.trunc || function(x) { return x
- 不要用于金融计算:它不解决浮点精度问题,例如 Math.trunc(0.1 + 0.2) 得到的是 0(因为 0.1+0.2 实际是 0.30000000000000004)










