问题描述
我正在尝试使用 JavaScript 应用 algorithm of number conversion。我将基数设置为长度为 85 的唯一字符串。我编写了如下两个函数来将基数 85 转换为基数 10(十进制),反之亦然,从十进制数转换为基数 85:
numBase1 = '0123456789ABCDEFGHIJKLMnopUQRSTVWXYZabcdefghijklmnopqurstvwxyz~[]{}:.;!@#$%^&*()_-+=/';
function basetoDec(num,stem){
n = num.length;
b = stem.length;
out = 0;
for (i =0; i < num.length; i++){
n--;
out = out + (stem.indexOf(num[i])*(Math.pow(b,n)));
}
return out;
}
function decToBase(num,stem){
const newBase = stem.length;
let out = '';
i=0;
while(num > 0){
let devide = num/newBase;
let result = Math.floor(devide);
let remind = devide - result;
num = result;
console.log(i+'>',num,devide,remind,newBase,Math.round(remind * newBase),stem[Math.round(remind * newBase)],Math.floor(devide))
out = stem[Math.round(remind * newBase)]+out;
i++
}
return out;
}
integ = basetoDec('Facebook.com6',numBase1)
console.log(integ,'****');
console.log(decToBase(integ,numBase1));
这里的问题,在某些时候,看起来像除以 85 以将小数转换为基数 85,它看起来像除以 1。
它仅适用于不超过 8 个字符长度的以 85 为基数的数字。第 9 个字符返回错误字符,第 10 个及以上字符返回基数为 85 的第一个数字,即 0
这是控制台的副本:
2.1946274146286338e+24 **** nb-converter.js:53:9
0> 2.5819146054454515e+22 2.5819146054454515e+22 0 85 0 0 2.5819146054454515e+22 nb-converter.js:46:17
1> 303754659464170770000 303754659464170770000 0 85 0 0 303754659464170770000 nb-converter.js:46:17
2> 3573584228990244400 3573584228990244400 0 85 0 0 3573584228990244400 nb-converter.js:46:17
3> 42042167399885224 42042167399885224 0 85 0 0 42042167399885224 nb-converter.js:46:17
4> 494613734116296 494613734116296.75 0.75 85 64 ] 494613734116296 nb-converter.js:46:17
5> 5818985107250 5818985107250.541 0.541015625 85 46 k 5818985107250 nb-converter.js:46:17
6> 68458648320 68458648320.588234 0.5882339477539062 85 50 o 68458648320 nb-converter.js:46:17
7> 805395862 805395862.5882353 0.5882352590560913 85 50 o 805395862 nb-converter.js:46:17
8> 9475245 9475245.435294118 0.43529411777853966 85 37 b 9475245 nb-converter.js:46:17
9> 111473 111473.4705882353 0.4705882353009656 85 40 e 111473 nb-converter.js:46:17
10> 1311 1311.4470588235295 0.4470588235294599 85 38 c 1311 nb-converter.js:46:17
11> 15 15.423529411764706 0.42352941176470615 85 36 a 15 nb-converter.js:46:17
12> 0 0.17647058823529413 0.17647058823529413 85 15 F 0 nb-converter.js:46:17
Facebook]0000
我也尝试了 PHP implementation 并且返回了相同的结果。
我不确定这个问题是不是由于十进制数很大?! 2.1946274146286338e+24
与否。有什么解决办法,还是硬件或操作系统的界限?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)