Javascript取整函数及向零取整几种常用的方法

 更新时间:2025年01月18日 11:47:35   作者:GISer_Jinger  
这篇文章主要介绍了Javascript取整函数及向零取整几种常用的方法,每种方法都有其特点和适用场景,推荐使用Math.trunc(),因为它语义明确、代码易读且性能较好,需要的朋友可以参考下

向零取整方式

在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取整函数及向零取整内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JS中将blob返回值转换为json格式的问题小结

    JS中将blob返回值转换为json格式的问题小结

    这篇文章主要介绍了JS中如何将blob返回值转换为json格式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-12-12
  • 解决前端使用xlsx.js工具读取excel遇到时间日期少43秒问题

    解决前端使用xlsx.js工具读取excel遇到时间日期少43秒问题

    这篇文章主要给大家介绍了关于如何解决前端使用xlsx.js工具读取excel遇到时间日期少43秒问题的相关资料,xlsx.js是一种前端库,它可以使您使用JavaScript读取、解析和导出电子表格文件,如Microsoft Excel,需要的朋友可以参考下
    2024-03-03
  • 求数组最大最小值方法适用于任何数组

    求数组最大最小值方法适用于任何数组

    之前虽然介绍过一种求数组最大最小值的方法,但那个方法只是用于数组中都是数字的,下面为大家介绍个方法适用于任何数组,有此需求的朋友可以参考下
    2013-08-08
  • three.js实现圆柱体

    three.js实现圆柱体

    这篇文章主要为大家详细介绍了three.js实现圆柱体的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • 代码触发js事件(click、change)示例应用

    代码触发js事件(click、change)示例应用

    Chrome , Firfox 不支持fireEvent的方法可以使用dispatchEvent的方法替代,直接给一个兼容的Code,下面有个不错的示例,喜欢的朋友可以收藏下
    2013-12-12
  • 全面解析Javascript无限添加QQ好友原理

    全面解析Javascript无限添加QQ好友原理

    这篇文章主要介绍了全面解析Javascript无限添加QQ好友原理的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • JavaScript写的一个自定义弹出式对话框代码

    JavaScript写的一个自定义弹出式对话框代码

    最近闲来无事,用js自己做了一个弹出式对话框,需要应用弹出式对话框的朋友可以参考下。
    2010-01-01
  • 移动端JS实现拖拽两种方法解析

    移动端JS实现拖拽两种方法解析

    这篇文章主要介绍了移动端JS实现拖拽两种方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • Script的加载方法小结

    Script的加载方法小结

    对动态加载脚本,需要重点关注的一个问题是,所动态加载的JS脚本的接口依赖问题。
    2011-01-01
  • 微信小程序实现时间轴特效

    微信小程序实现时间轴特效

    这篇文章主要为大家详细介绍了微信小程序实现时间轴特效,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05

最新评论