Math.abs()仅去除负号返回绝对值,不改变小数;取整函数(floor/ceil/round/trunc)按不同规则截去小数,结果可正可负。二者目的与行为完全不同。

Math.abs() 专门用来获取数值的绝对值,不改变数字的大小,只去掉负号;而取整函数(如 Math.floor、Math.ceil、Math.round、Math.trunc)的作用是把数字“按规则砍掉小数部分”,和正负号无关,也不保证结果非负。
Math.abs():只管符号,不管小数
它只做一件事:把负数变正,正数和零保持不变。小数照常保留,不会四舍五入或截断。
-
Math.abs(-3.7)→ 3.7 -
Math.abs(0)→ 0 -
Math.abs(-0)→ 0(-0 被转为 0) -
Math.abs("−5")→ 5(字符串会先被转为数字)
取整函数:处理小数位,但不统一处理符号
它们关注的是“怎么去掉小数”,各自规则不同,且对负数的处理差异明显:
-
Math.floor(-3.7)→ -4(向下取整,往更小方向舍入) -
Math.ceil(-3.7)→ -3(向上取整,往更大方向舍入) -
Math.round(-3.7)→ -4(四舍五入,-3.5 及以下进一) -
Math.trunc(-3.7)→ -3(直接砍掉小数,等价于向零取整)
关键区别:目的与行为完全不同
绝对值解决的是“距离零点有多远”,结果永远 ≥ 0;取整解决的是“最接近的整数是哪个”,结果可正可负,取决于原数本身和所选规则。
立即学习“Java免费学习笔记(深入)”;
- 想让
-4.2变成 4.2?用Math.abs() - 想让
-4.2变成 -4?用Math.trunc()或Math.ceil() - 想让
-4.2变成 -5?用Math.floor() - 混用要小心:比如
Math.abs(Math.floor(-3.7))得到的是 4,这不是“取整”,而是先向下取整再取绝对值
实际使用建议
别指望 Math.abs() 帮你取整,也别指望 Math.round() 帮你去负号。该用哪个,看你要解决什么问题:
- 计算差值的大小(比如误差、距离)→ 优先
Math.abs() - 控制索引、分页、数组下标 → 多用
Math.trunc()或Math.floor(),注意负数边界 - 需要四舍五入显示 →
Math.round(),但记住它对 .5 的处理是“向偶数舍入”(银行家舍入) - 兼容旧环境且只需去小数 →
~~x或x | 0(仅适用于安全整数范围内的数值)










