JavaScript编程题(七)——关于Number类型

1、获取数字 num 二进制形式第 bit 位的值。
1)bit 从 1 开始
2)返回 0 或 1

方法一:

知识点:数值的toString()方法;charAt()方法返回指定位置的字符,若超过范围位置,返回空字符,Number()对空字符返回 0。

function valueAtBit(num, bit) {
    return Number((num.toString(2)).charAt(num.toString(2).length-bit));
}

方法二:

知识点:位操作符:左移

function valueAtBit(num, bit) {
    return num>>(bit-1) & 1;
}

 

2、给定二进制字符串,将其换算成对应的十进制数字。

方法一:

知识点:扩展运算符可将字符串转换为数组。

function base10(str) {
    let num = 0;
    [...str].reverse().forEach((item,i)=>{
        num+=item*Math.pow(2,i);
    })
    return num;
}

方法二:

知识点:parseInt转换数值

function base10(str) {
    return parseInt(str,2);
}

 

3、将给定数字转换成二进制字符串。如果字符串长度不足 8 位,则在前面补 0 到满8位。

方法一:

知识点:数值的toString()方法;String对象的repeat(time)方法,参数time表示要重复的次数。

function convertToBinary(num) {
    let str = num.toString(2);
    if(str.length<8){
        str="0".repeat(8-str.length)+str;
    }
    return str;
}

方法二:

知识点:数值的toString()方法;String对象的padStart方法,用来补全字符串。

function convertToBinary(num) {   
    return num.toString(2).padStart(8,'0');
}

4、求 a 和 b 相乘的值,a 和 b 可能是小数

知识点:JavaScript中Number类型使用 IEEE754 格式来表示整数和浮点数值,使用基于IEEE754 数值的浮点计算有个通病——浮点数值计算会产生舍入误差的问题。
方法一:把 a 和 b 扩大合适倍数变为整数,相乘,再除以扩大的倍数。

function multiply(a, b) {
    let beiA=beiB=0;
    beiA = (""+a).indexOf(".")==-1 ? 0 : (""+a).length-1-(""+a).indexOf(".");
    beiB = (""+b).indexOf(".")==-1 ? 0 : (""+b).length-1-(""+b).indexOf(".");
    let a1 = a*Math.pow(10,beiA);
    let b1 = b*Math.pow(10,beiB);
    return a1*b1/Math.pow(10,beiA+beiB);
}

方法二:计算两小数的小数点位数,然后相加得到保留的小数点位数,再相乘保留相应小数位。

知识点:Number对象的toFixed(x)方法,把数字转换为字符串,结果的小数点后有指定 x 位的数字。

function multiply(a, b) {
    var re = /\./;
    var aDec = a.toString().split('.')[1] || '';
    var bDec = b.toString().split('.')[1] || '';
    var fix = aDec.length  + bDec.length;
    return (a * b).toFixed(fix);
}

 

5、实现(5).add(3).minus(2),使其输出结果为:6

知识点:实现链式写法,实例调取方法,只需要把这个方法放到当前实例所属的原型上。每一个方法执行完,都要返回Number这个类的实例,这样才可以继续调取NUMBER类原型中的方法。

~ function(){
  function check(n){
      n=Number(n);
      return isNaN(n)?0:n;
  }  
  function add(n){
      n=check(n);
      return this+n;
  }
  function minus(n){
      n = check(n)
      return this -n;
  }
  Number.prototype.add = add;
  Number.prototype.minus = minus;
}()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章