在 JavaScript 中将浮点数转换为整数

Nithin Krishnan 2023年1月30日
  1. 使用 JavaScript 中的 parseInt() 函数将浮点数转换为整数
  2. 在 JavaScript 中使用 Number.toFixed() 将浮点数转换为整数
  3. 使用 JavaScript 中的按位运算符将浮点数转换为整数
  4. 使用 Java 中的 Math 库函数将浮点数转换为整数
  5. 总结
在 JavaScript 中将浮点数转换为整数

在 JavaScript 中,我们有多种将 float 转换为 int 的方法,如下所示。

  • parseInt() 函数
  • Number.toFixed() 方法
  • 用按位运算符转换
    • 与 0 进行逻辑或
    • 使用双 NOT 运算符
    • 右移 0 位
  • 在 JavaScript 中使用 Math 库函数
    • Math.floor()
    • Math.round()
    • Math.ceil()
    • Math.trunc()

使用 JavaScript 中的 parseInt() 函数将浮点数转换为整数

parseInt() 在 JavaScript 中被广泛使用。通过这个函数,我们可以将不同数据类型的值转换为整数类型。在本节中,我们将看到浮点数到整数的转换。parseInt() 的语法是 parseInt(<value>)。以下代码显示了该函数的行为。

console.log(parseInt(123.321));
console.log(parseInt(123.998));

输出:

123
123

备注

  • 有关更多信息,请参阅 MSN 文档
  • 在转换浮点数时,parseInt() 丢弃小数,并且在返回浮点值的整数部分时不考虑它们。
  • 如果无法进行转换,则 parseInt() 将返回 NaN。因此,最好在转换值时包含 isNaN() 检查,以便代码安全且不会中断。

在 JavaScript 中使用 Number.toFixed() 将浮点数转换为整数

Number.toFixed() 的行为与 parseInt() 略有不同。将数字四舍五入到最接近的整数值。因此,请注意四舍五入的事实。Number.toFixed()将小于.5 的 float 的十进制值四舍五入到较低的整数值。如果十进制值为 0.5 或更大,则浮点数将四舍五入为下一个更高的整数值。Number.toFixed()函数的语法如下。

numberObject.toFixed(<number of digits>);

通常,我们需要向此函数传递一个参数,该参数指定输出中小数点后的位数。出于我们的目的,我们无需提及任何参数,因为默认情况下,它将参数设为 0,因此返回整数值。请参考以下示例代码。

console.log( (123.123).toFixed(2) );
console.log( (123.123).toFixed() );
console.log( (123.98).toFixed() );
console.log( (123.49).toFixed() );
console.log( (123.5).toFixed() );

输出:

123.12
123
124
123
124

备注

  • parseInt() 方法不同,Number.toFixed() 在提取整数部分方面并不出名,因为它对作为参数传递的浮点数值进行了四舍五入。
  • 可以使用此函数仅转换浮点值。与 parseInt() 函数不同,Number.toFixed() 不支持将字符串值转换为浮点数。

使用 JavaScript 中的按位运算符将浮点数转换为整数

我们已经看到了 parseInt()Number.toFixed() 的方法。两者都执行一些内部操作以获得所需的结果。与这两种方法相比,按位运算符可高效,快速且高效地将浮点值转换为整数。我们可以使用以下按位运算符进行转换。

与 0 进行逻辑或运算

我们可以使用按位 OR 运算符来获取浮点数的整数部分。按位运算符在二进制层面上发挥作用。它将操作数转换为二进制,然后逐位执行运算。对可接受范围内的任何浮点数与 0 进行逻辑或运算,将返回浮点值的整数部分。请参考以下示例。

console.log(123.321 | 0);
console.log(123.5432 | 0);
console.log(123.921 | 0);
console.log(216 | 0);
console.log(-321.456 | 0)

输出:

123
123
123
216
-321

使用双 NOT 运算符

另一个按位运算符是 NOT 运算符,由~符号表示。作为一元运算符,我们可以使用按位 NOT 运算符去除浮点数中的小数部分。二进制级别的 NOT 运算符反转二进制位的值(对于 1 位,返回 0,对于 0 位,返回 1)。这意味着,如果一个数字用 10110 表示为二进制,则对其应用 NOT 将得到相反的值 01001。再次应用 NOT 操作将返回数字的原始位(10110)。因此,两次使用 NOT 运算符将返回数字值,并且在此过程中,如果它是整数,则不会更改数字。但是对于浮点值,两次使用 NOT 运算符将只返回浮点数的整数部分。以下示例阐明了这一事实。

console.log(~~(123.321));
console.log(~~(123.53));
console.log(~~(23.97));
console.log(~~(-23.97));
console.log(~~(-0.97));

输出:

123
123
23
-23
0

右移 0 位

我们可以应用按位右移运算符(用 >> 字符表示)。它将浮点数值转换为整数。在二进制级别下,按位向右移运算符将操作数的二进制位向右移动第二个操作数指定的计数。因此,它忽略了向右溢出的位。这样,该函数将保留数字的符号值。以下代码代表正确的 SHIFT 运算符的工作方式。

console.log(123.321 >> 0);
console.log(123.53 >> 0);
console.log(23.97 >> 0);
console.log(-23.97 >> 0);
console.log(-0.97 >> 0);

输出:

123
123
23
-23
0

备注

  • 按位运算符速度更快,因为它最接近于机器语言,并且不需要像 parseInt()Number.toFixed() 在内部完成的那样执行其他检查或操作。
  • 如果对大量运算符使用按位运算符,例如 ORNOT 等,可能会产生意外的结果。截断十进制值所支持的最大值是 2147483647(231-1)。大于 2147483647 的任何数字都将产生意外的结果。
  • 在 JavaScript 中,浮点数由 64 位表示,保留一位用于保留符号值(正或负),整数部分为 32 位。按位运算符对带符号的 32 位数字进行运算,而忽略十进制值。因此,我们得到浮点值的整数部分。

使用 Java 中的 Math 库函数将浮点数转换为整数

我们可以使用 JavaScript Math 库,该库具有各种函数,可以从浮点数获取整数。与按位运算符不同,它们根据要求提供额外的功能,例如将值四舍五入到最接近的数字,截断值等。为此,我们可以使用以下方法。

Math.floor() 进行转换

Math.floor() 函数将作为参数传递的值四舍五入到下一个较低的整数值。Math.floor() 的语法是 Math.floor(<float value>)。以下是一些示例,展示了用法以及如何将浮点数转换为整数。

console.log(Math.floor(123.321));
console.log(Math.floor(123.53));
console.log(Math.floor(23.97));
console.log(Math.floor(-23.97));
console.log(Math.floor(-0.97));

输出:

123
123
23
-24
-1

Math.floor(-23.97) 这样的负浮点数的情况似乎令人困惑,但是该函数正确地将值转换为下一个较低的整数 -24。记住负数的数值越高,其实际值越小。

Math.round() 转换

Math.floor() 函数不同,Math.round() 近似传递给参数的值。如果小数点后的值为 5 或更大,则该数字将四舍五入为下一个较大的整数。否则,如果小数点后的值小于 5,则将其舍入为较小的整数。因此,基于小数点后的值,Math.round() 函数的行为类似于 Math.floor()Math.ceil() 函数。以下是 Math.round() 的一些示例。

console.log(Math.round(123.321));
console.log(Math.round(123.53));
console.log(Math.round(23.97));
console.log(Math.round(-23.97));
console.log(Math.round(-0.97));

输出:

123
124
24
-24
-1

Math.ceil() 转换

Math.ceil() 函数的行为与 Math.floor() 函数相反。而不是像 Math.floor() 中那样四舍五入到下一个较低的整数,Math.ceil() 返回下一个较高的整数值。以下是 Math.ceil() 的一些转换。

console.log(Math.ceil(123.321));
console.log(Math.ceil(123.53));
console.log(Math.ceil(23.97));
console.log(Math.ceil(-23.97));
console.log(Math.ceil(-0.97));

输出:

124
124
24
-23
-0

使用 Math.trunc() 进行转换

顾名思义,Math.trunc() 函数会截断十进制值,并返回浮点值的整数部分。可以认为该方法类似于前面讨论的按位运算符。在这里,没有四舍五入到最接近的整数。而是按原样返回浮点值的整数部分。以下是 Math.trunc() 的一些用例。

console.log(Math.trunc(123.321));
console.log(Math.trunc(123.53));
console.log(Math.trunc(23.97));
console.log(Math.trunc(-23.97));
console.log(Math.trunc(-0.97));

输出:

123
123
23
-23
-0

总结

有多种方法可以从浮点数中获取整数部分。按位运算符在二进制级别上执行操作而无需转换或任何其他处理的要求,因此执行速度更快。parseInt()Math.trunc() 和按位运算符(与 0 逻辑或运算,双 NOT,右移 0)给出确切的整数,就好像它们撕裂了浮点值一样在小数点处,然后返回其中的整数部分。如果我们有兴趣处理浮点数以使其舍入或根据业务需求获取最接近的整数,则最好使用 Number.toFixed()Math.round()Math.ceil()Math.floor() 功能。

相关文章 - JavaScript Integer