2017-04-04 156 views
1

我一直在做一個自定義功能轉換十六進制從爲十進制我scratch project的JavaScript:十六進制到十進制轉換錯誤

function Hex2Decimal(hex){ 
    var deci = 0; 
    var num = 1; 
    var hexstr = String(hex); 
    hexstr = hexstr.toLowerCase(); 
    var expon = 0; 
    for(var i = 0; i < hex.length; i++){ 
     expon = Math.pow(16,hexstr.length - (num+1)); 
     if(hexstr[num+1] === "a"){ 
      deci = (10*expon)+deci; 
     }else if(hexstr[num-1] === "b"){ 
      deci = (11*expon)+deci; 
     }else if(hexstr[num-1] === "c"){ 
      deci = (12*expon)+deci; 
     }else if(hexstr[num-1] === "d"){ 
      deci = (13*expon)+deci; 
     }else if(hexstr[num-1] === "e"){ 
      deci = (14*expon)+deci; 
     }else if(hexstr[num-1] === "f"){ 
      deci = (15*expon)+deci; 
     }else if(hexstr[num-1] != "undefined"){ 
      deci = (Number(hexstr[num-1])*expon)+deci; 
     } 
     num = num + 1; 
    } 
    return deci; 
} 

但是當我把「BC324240」到它,它返回值「197338148」而不是「3157410368」。 將該值轉換回十六進制時,會得到'BC32424'。出於某種原因,我需要幫助尋找,其中的'0'完全被忽略。 也注意到,用「10」返回1 ...

+0

'我

+0

我改變了它,但結果仍然是一樣的。沒什麼不同。 –

+0

是的,這是一些有趣的代碼。我很難理解你想要做什麼。你可以添加一些評論嗎? –

回答

1

你錯過了最後的位置(數字應該由16^0乘),因爲您的來電:

expon = Math.pow(16, hexstr.length - (num+1)); 

是關閉的一個,應該是:

expon = Math.pow(16, hexstr.length - num);