在 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()
在内部完成的那样执行其他检查或操作。 - 如果对大量运算符使用按位运算符,例如
OR
,NOT
等,可能会产生意外的结果。截断十进制值所支持的最大值是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()
功能。
相关文章
Do you understand JavaScript closures?
发布时间:2025/02/21 浏览次数:108 分类:JavaScript
-
The function of a closure can be inferred from its name, suggesting that it is related to the concept of scope. A closure itself is a core concept in JavaScript, and being a core concept, it is naturally also a difficult one.
Do you know about the hidden traps in variables in JavaScript?
发布时间:2025/02/21 浏览次数:178 分类:JavaScript
-
Whether you're just starting to learn JavaScript or have been using it for a long time, I believe you'll encounter some traps related to JavaScript variable scope. The goal is to identify these traps before you fall into them, in order to av
How much do you know about the Prototype Chain?
发布时间:2025/02/21 浏览次数:150 分类:JavaScript
-
The prototype chain can be considered one of the core features of JavaScript, and certainly one of its more challenging aspects. If you've learned other object-oriented programming languages, you may find it somewhat confusing when you start
用 jQuery 检查复选框是否被选中
发布时间:2024/03/24 浏览次数:102 分类:JavaScript
-
在本教程中学习 jQuery 检查复选框是否被选中的所有很酷的方法。我们展示了使用直接 DOM 操作、提取 JavaScript 属性的 jQuery 方法以及使用 jQuery 选择器的不同方法。你还将找到许多有用的
jQuery 中的 Window.onload 与 $(document).ready
发布时间:2024/03/24 浏览次数:180 分类:JavaScript
-
本教程演示了如何在 jQuery 中使用 Window.onload 和 $(document).ready 事件。