2010-06-18 59 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。即使对于庞大的数字,这个脚本的运行也相当快

相关问题