JavaScript向零取整与常见数学取整函数详解

作者:青柠时间:2026-10-31 18:21:03浏览:533

本文详解JavaScript中向零取整的多种实现方式,重点解析Math.trunc()、按位或(|)及双波浪号(~~)的用法与限制。同时对比Math.floor、Math.ceil、Math.round等常见取整函数,并提供代码示例与性能建议,帮助开发者根据场景选择最优方案。

向零取整方式

在JavaScript中,存在多种对数字进行取整操作的途径,即去除小数部分并保留整数部分。其中,向0取整(亦称截断小数部分)的常用方法包括以下几种:

  • 使用 Math.trunc(): Math.trunc() 方法会去除数字的小数部分,返回其整数部分,且不执行四舍五入操作。

    let num = 4.9;
    let truncated = Math.trunc(num); // 4
    console.log(truncated);
  • 使用按位运算符 |(按位或): 按位运算符 | 在处理数字时,会将操作数转换为32位整数,从而截断小数部分。

    let num = 4.9;
    let truncated = num | 0; // 4
    console.log(truncated);
  • 使用双波浪号 ~~: 双波浪号 ~~ 也是一种按位取整的方式,效果与 | 类似,会截断小数部分。

    let num = 4.9;
    let truncated = ~~num; // 4
    console.log(truncated);
    综上所述,最推荐的方法是使用 Math.trunc(),因为它语义明确,代码易读,且性能较好。其他方法虽然也能实现向0取整的效果,但在可读性和维护性上可能稍逊一筹。
  • 使用 Math.floor() 和 Math.ceil() 的组合(仅当数字为正数时): 虽然 Math.floor() 和 Math.ceil() 是用于向下和向上取整的方法,但可以通过判断数字的符号来选择使用哪一个,以达到向0取整的效果。不过这种方法相对复杂,且不如前几种方法直观。

function truncate(num) {
return num < 0 ? Math.ceil(num) : Math.floor(num);
}


let num = 4.9;
let truncated = truncate(num); // 4
console.log(truncated);


let negNum = -4.9;
let negTruncated = truncate(negNum); // -4
console.log(negTruncated);

5.使用字符串操作: 可以通过将数字转换为字符串,然后去掉小数点及其后的部分,最后再转换回数字。这种方法虽然可以实现效果,但效率较低且不够直观,不建议使用。

function truncate(num) {
return parseInt(num.toString(), 10);
}


let num = 4.9;
let truncated = truncate(num); // 4
console.log(truncated);

常见取整函数

在JavaScript中,存在多种对数字进行取整操作的途径。这些方法各有特点,适用于不同的场景。以下是常见的几种取整函数及其详解:

  • Math.floor()
    • 功能:向下取整,即返回小于或等于给定数字的最大整数。
    • 语法:Math.floor(x)
    • 示例:
      console.log(Math.floor(4.9)); // 输出: 4
      console.log(Math.floor(-4.1)); // 输出: -5
  • Math.ceil()
    • 功能:向上取整,即返回大于或等于给定数字的最小整数。
    • 语法:Math.ceil(x)
    • 示例:
      console.log(Math.ceil(4.1)); // 输出: 5
      console.log(Math.ceil(-4.9)); // 输出: -4
  • Math.round()
    • 功能:四舍五入,即返回最接近给定数字的整数。
    • 语法:Math.round(x)
    • 示例:
      console.log(Math.round(4.5)); // 输出: 5
      console.log(Math.round(4.4)); // 输出: 4
      console.log(Math.round(-4.5)); // 输出: -4
  • Math.trunc()
    • 功能:移除小数部分,只保留整数部分,不进行四舍五入。
    • 语法:Math.trunc(x)
    • 示例:
      console.log(Math.trunc(4.9)); // 输出: 4
      console.log(Math.trunc(-4.1)); // 输出: -4

      位运算符取整

      • 功能:通过位运算符 |、^、&、~、<<、>>、>>> 可以将浮点数转换为整数,相当于去掉小数部分(类似 Math.trunc,但仅对32位整数有效)。
      • 示例:
        console.log(4.9 | 0); // 输出: 4
        console.log(-4.1 | 0); // 输出: -4
      • 注意:位运算符取整仅适用于32位整数范围(-231-1),超出范围会导致精度丢失。

  • 双否定(Double Negation)
    • 功能:通过双否定操作将浮点数转换为整数(相当于 Math.trunc)。
    • 示例:
      console.log(~~4.9); // 输出: 4
      console.log(~~-4.1); // 输出: -4
    • 注意:双否定操作对超出JavaScript安全整数范围的数字无效。
  • 字符串转换
    • 功能:通过字符串转换并截取整数部分来取整。
    • 示例:
      console.log(parseInt(4.9)); // 输出: 4
      console.log(parseInt(-4.1)); // 输出: -4
    • 注意:这种方法依赖于字符串转换,性能可能不如其他内置方法。
  • toFixed() 后转整数
    • 功能:通过 toFixed() 方法将数字转换为指定小数位数的字符串,然后转换为整数。
    • 示例:
      const num = 4.9;
      console.log(parseFloat(num.toFixed(0))); // 输出: 5
      const num2 = -4.1;
      console.log(parseFloat(num2.toFixed(0))); // 输出: -4
    • 注意:toFixed() 方法返回的是字符串,需要再次转换为数字。

总结

  • Math.floor():向下取整。
  • Math.ceil():向上取整。
  • Math.round():四舍五入。
  • Math.trunc():移除小数部分。
  • 位运算符:通过位操作移除小数部分(32位整数范围内有效)。
  • 双否定:通过双否定操作移除小数部分(32位整数范围内有效)。
  • 字符串转换:通过字符串转换并截取整数部分。
  • toFixed() 后转整数:通过 toFixed() 方法转换为字符串后再转为整数。

每种方法都有其适用的场景和限制,选择时需根据具体需求进行权衡。

到此这篇关于Javascript取整函数及向零取整几种常用的方法的文章就介绍到这了,更多相关js取整函数及向零取整内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

作者最新文章