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

时间:2014-01-15 20:21:59

标签: javascript numbers integer truncation

我在SO answer中找到此代码,以便在Javascript中将数字截断为整数:

var num = -20.536;
var result = num | 0;
//result = -20

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

3 个答案:

答案 0 :(得分:4)

该方法通过隐式将数字转换为32位整数来工作,因为二进制运算符在计算中使用32位整数。

该方法的缺点是:

  • 隐藏所需的操作是操作符的隐含效果,因此不容易看出代码的用途是什么。

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

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

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

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

Javascript中没有向往零的方法,所以要做到这一点,你需要在舍入前检查符号:

var result = num < 0 ? Math.ceil(num) : Math.floor(num);

答案 1 :(得分:2)

像这样使用Javascript的parseInt

var num = -20.536;
var num2int = parseInt(num);

return num2int; //returns -20

多田! num现在是一个值为-20的int。

答案 2 :(得分:2)

如果你使用parseInt,你可以从-2 ^ 53到+ 2 ^ 53:

parseInt(-20.536) // -20

parseInt(9007199254740992.1234) // 9007199254740992

为什么+/- 2 ^ 53?这是因为JavaScript使用64位表示形式的浮点数,具有52位尾数。因此,可以精确地表示高达2 ^ 53的所有整数值。除此之外,整数都是近似的。