现在,当数字很小时,这很简单,但是像“9223372036854775807”这样的数字对于 parseInt() 来说太大了。
我不确定如何在 Google 文档脚本编辑器中执行此操作,这似乎不允许外部类。
现在,当数字很小时,这很简单,但是像“9223372036854775807”这样的数字对于 parseInt() 来说太大了。
我不确定如何在 Google 文档脚本编辑器中执行此操作,这似乎不允许外部类。
给你,在某处使用这个脚本,它似乎工作。其背后的想法是将字符串拆分为 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。即使对于巨大的数字,这个脚本也能运行得非常快。