以 85 为基数/从 85 基数为基数的对话

问题描述

我正在尝试使用 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 (将#修改为@)