这是截断数字的有效方法吗?

Gui*_*rez 2 javascript integer numbers truncation

我在SO 答案中找到了这段代码,作为在 Javascript 中将数字截断为整数的方法:

var num = -20.536;
var result = num | 0;
//result = -20
Run Code Online (Sandbox Code Playgroud)

这是在 Javascript 中截断数字的有效方法,还是某种 hack?为什么它只适用于小于 2147483647 的数字?

Guf*_*ffa 5

该方法的工作原理是将数字隐式转换为 32 位整数,因为二元运算符在计算中使用 32 位整数。

该方法的缺点是:

  • 所需的操作被隐藏为运算符的隐式效果,因此不容易看出代码的意图。

  • 它只能处理32位数字范围内的整数。

对于任何常规情况,您应该使用Math.floororMath.ceil方法,它清楚地显示了代码的意图,并且它处理双精度范围内的任何数字,即最多 52 位的整数:

var num = 20.536;
var result = Math.floor(num); // 20

var num = -20.536;
var result = Math.ceil(num); // -20
Run Code Online (Sandbox Code Playgroud)

Javascript 中没有向零舍入的方法,因此要做到这一点,您需要在舍入之前检查符号:

var result = num < 0 ? Math.ceil(num) : Math.floor(num);
Run Code Online (Sandbox Code Playgroud)