!! 不是取整操作,它仅将任意值转换为布尔值:0、''、null、undefined、nan 转为 false,其余转为 true;而取整需用 math.floor、math.ceil 等方法。

JavaScript 中的双重否定(!!)**不能用于取整**,它只做布尔值转换:把任意值转为 true 或 false,和取整完全无关。
为什么 !! 不是取整操作?
!! 的作用是:
– 第一个 ! 将操作数转为布尔值并取反;
– 第二个 ! 再次取反,最终得到原值对应的布尔等价(0、''、null、undefined、NaN → false;其余 → true)。
它不改变数值精度,也不截断小数部分。
例如:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
!!3.7 // true (不是 3)<br> !!-2.9 // true (不是 -2)<br> !!0 // false (不是 0 作为整数,而是布尔 false)<br> !!0.0 // false<br> !!"4.8" // true (字符串转布尔,非取整)
真正常用的取整方法有哪些?
根据需求选择合适的方式:
-
Math.floor(x):向下取整(≤ x 的最大整数),如Math.floor(3.9) → 3,Math.floor(-2.1) → -3 -
Math.ceil(x):向上取整(≥ x 的最小整数),如Math.ceil(3.1) → 4,Math.ceil(-2.9) → -2 -
Math.round(x):四舍五入到最近整数(.5 向上),如Math.round(2.5) → 3,Math.round(-2.5) → -2 -
Math.trunc(x):直接截去小数部分(向零取整),如Math.trunc(3.9) → 3,Math.trunc(-3.9) → -3 -
位运算符(如
x | 0、~~x):仅对 32 位有符号整数有效,会隐式转换并截断小数,但有范围限制(-2³¹ 到 2³¹−1)且对NaN、Infinity返回0,慎用
常见误区提醒
有人误把 ~~x(按位非两次)当成“双重否定取整”,其实它是利用了位运算的隐式类型转换机制,和逻辑非 !! 完全不同:
– ~~3.7 → 3(看似取整)
– !!3.7 → true(布尔值)
二者行为、返回类型、适用场景都毫无关系。
想安全、清晰、可读地取整,请直接使用 Math 方法,别混淆逻辑运算与数值运算。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










