美文网首页
Math函数

Math函数

作者: 元宇宙编程 | 来源:发表于2021-11-15 09:13 被阅读0次
    数据基本类型

    JavaScript 对数值进行四舍五入常见操作有以下6种:

    ceil - 向上取整
    
    floor - 向下取整
    
    round - 四舍五入
    
    toFixed - 固定精度
    
    toPrecision - 固定长度
    
    parseInt - 取整(位操作符)
    
    • 1、向上取整: ceil

    ceil是天花板的意思,表示在一个数值之上,且距离该数最近的整数。ceil 是 Math 对象的静态方法,需要传递一个参数,其调用方法如下

    Math.ceil(12.34); //13
    
    Math.ceil(12.68); //13
    
    • 2、向下取整: floor

    floor是地板的意思,表示在一个数值之下,且距离该数最近的整数。floor 是 Math 对象的静态方法,需要传递一个参数,其调用方法如下:

    Math.floor(12.34);//12
    
    Math.floor(12.68);//
    
    • 3、四舍五入: round

    round 的作用是对一个浮点数进行四舍五入,并保留整数位。round 也是 Math 对象的静态方法,也需要传递一个参数,其调用方法如下:

    Math.round(12.34);//12
    
    Math.round(12.54);//13
    
    • 4、固定精度: toFixed

    toFixed和上面三个方法不同,它是 Number 原型上实现的一个方法,其作用是对一个浮点数进行四舍五入并保留固定小数位。 toFixed 需要传递一个参数,其调用方式如下:

    100.456001.toFixed(2);//100.46
    
    100.456001.toFixed(3);//100.456
    
    • 5、固定长度: toPrecision

    toPrecison 也是 Number 原型上实现的一个处理浮点数的方法,和 toFixed 不同的是,它是对一个浮点数进行四舍五入并保留固定长度的有效数字,包括整数部分。

    99.456001.toPrecision(5);//99.456
    
    100.456001.toPrecision(5);//100.46
    
    • 6、取整: parseInt(位操作符)

      parseInt是 全局对象 window上的一个方法,其作用是对一个可转换的数值取整,分为以下两种情况:

      将字符串数值转化为 Number 整数,对字符串的每一个字符进行转化,直到遇到不可转化的字符(包括小数点)停止

      对浮点类型数值取整,忽略小数部分,不做四舍五入处理

       //字符串数值parseInt('100') ; // 100
      
        parseInt('100axt'); //100
      
        parseInt('100xh20'); //100
      
        parseInt('100.78'); //123
      
        //Number 类型
      
         parseInt(100.12) ; // 100
      
         parseInt(100.78); //100
      

    除过 parseInt 可以取整外,通过一些 位操作符 也可以实现取整:

      | 0 : 和 0 进行 按位或 操作,原值不变
    
      ~~ : 两次 按位非 操作得到的也是原值
    
      >>0: 右移0位
    
      <<0: 左移0位
    
     >>>0: 无符号右移0位
    

    这些 位操作符 在实现取整操作时,会表现出一些共同的特征:

    对于 Number 类型来说,直接应用位操作, 和 parseInt 得到的结果几乎一样;

    对于其他类型,内部会先通过 Number() 将其转换为一个数值,然后再应用位操作。

    对特殊 NaN 和 Infinity 值应用位操作时,这两个值都会被当成 0 来处理 。

     //Number 类型:直接应用位操作
    
     ~~ 100.12; // 100
    
     100.78 | 0; // 100
    
     100.45 >> 0; // 100
    
     100.50 << 0; // 100
    
     100.96 >>> 0; // 100
    

    //其他类型:先使用 Number() 转换为数值,再应用位操作

    ~~ '100.12' // 100, Number('100.12') == 100.12
    
    '100.50' >> 0; // 100,Number('100.50') == 100.50
    
    '100.96' << 0; // 100,Number('100.96') == 100.96
    
     ~~ 'abc' // 0 , Number('abc') == NaN
    
     '12abc' >> 0; // 0, Number('12abc') == NaN
    
     undefined | 0 ; // 0, Number(undefined) == NaN
    
     ~~null; // 0 , Number(null) == 0
    
     true >> 0; // 1 , Number(true) == 1
    
     false >> 0; //0 , Number(false) == 0
    
     [] << 0; // 0 , Number([]) == 0
    
     ~~NaN; // 0
    
     Infinity >>> 0; // 0
    

    位操作符用于在最基本的层次上,即按内存中表示数值的位来操作数值。ECMAScript 中的所有数值都以 IEEE-754 64 位格式存储,但位操作符并不直接操作64 位的值。而是先将 64 位的值转换成 32 位的整数,然后执行操作,最后再将结果转换回 64 位。这就是位操作符能实现取整的原因。

    鉴于这样的实现机制,JavaScript 中的位运算符只能支持 32 位数字,大于32位的数字在底层转换时会存在溢出问题,而且多了一层转换也会降低位运算的效率 。但尽管这样,位操作符在对数字取整时,还是要比 parseInt 快得多,性能有显著的提升。

    相关文章

      网友评论

          本文标题:Math函数

          本文链接:https://www.haomeiwen.com/subject/poannltx.html