2010-06-18 52 views
1

現在,當數字很小時,這很簡單,但像「9223372036854775807」這樣的數字對於parseInt()來說太大了。如何將字符串轉換爲javascript中的位掩碼?

我不確定如何在Google文檔腳本編輯器中執行此操作,但似乎不允許使用外部類。

+1

你想要9223372036854775807位? – Kobi 2010-06-18 16:19:28

回答

1

在這裏,你使用這個腳本的地方,它似乎工作。其背後的想法是,它將字符串分成8個字符的塊,然後計算塊/ 2,然後將塊加起來得到除法結果2.

除以2 - 它很容易計算結果然後。

var maxIntSize = 8; 

function divide2(number, addup, depth) { 
    var result = ""; 

    var partLength = Math.min(number.length,maxIntSize); 
    var part = number.substring(0,partLength); 

    var partNum = parseInt(part,10); 
    var partAdd = (addup==0)?0:(5*Math.pow(10,partLength-1)); 
    var partRes = Math.floor(partNum/2)+partAdd; 
    var partRem = partNum%2; 

    result = result + partRes; 

    if (depth > 0) { 
     for (var i=result.length; i < partLength; i++) { 
      result = "0"+result; 
     } 
    } 

    var nextPart = number.substring(partLength, number.length); 

    if (partLength < number.length) { 
     var res = divide2(nextPart, partRem, depth+1); 
     result = result + res.result; 
     res.result = result; 
     return res; 
    } else { 
     var res = {result: result, remainder: partRem}; 
     return res; 
    } 
} 

function toBinary(number) { 
    var out = ""; 

    while (number.length > 1 || number != "0") { 
     var res = divide2(number,0,0); 
     out = "" + res.remainder + out; 
     number = res.result; 
    } 

    return out; 
} 

var testNum = "12312312312112312312312312312312312312312312312312312312312312312312312312312312312312312312123"; 
document.write("bin("+testNum+") = "+toBinary(""+testNum)+"<br/>"); 

劃分爲塊需要快速計算除法2。即使對於龐大的數字,這個腳本的運行也相當快

相關問題