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;
}()

 

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