MonikaCeng
MonikaCeng
  • 发布:2021-05-20 11:42
  • 更新:2021-05-20 13:56
  • 阅读:386

JS两个大数相乘如何精度如何解决?

分类:uniCloud
const result = 0xaabbccddeeff * 0xaabbccddeeff  
console.log(result.toString(16)) // 结果为"71ddf5dbb198480000000000",后面都是0

计算0xaabbccddeeff * 0xaabbccddeeff,结果为0x71ddf5dbb198480000000000,后面几位都失真了,如何得到真实结果?

2021-05-20 11:42 负责人:无 分享
已邀请:
MonikaCeng

MonikaCeng (作者)

nodejs10.4以上可以用BigInt函数解决
dcloud的云函数是nodejs8,没有BigInt函数

我吃西红柿丶

我吃西红柿丶

试试这个
参数需要转字符串

function dazhenghsuAdd(str1,str2){  
    str1=str1.split('').reverse();  
    str2=str2.split('').reverse();  
    let result=[];  
    for(let i=0;i<str1.length;i++){  
        for(let j=0;j<str2.length;j++){  
            result[i+j]=result[i+j]||0;//如果result[i+j]是undefined则将其变为0  
            result[i+j]+=parseInt(str1[i])*parseInt(str2[j]);  
        }  
    }  
    let temp;  
    for(let k=0;k<result.length;k++){  
        if(result[k]>9){  
            temp=Math.floor(result[k]/10);  
            result[k]=result[k]%10;  
            result[k+1]=result[k+1]||0;  
            result[k+1]+=temp;  
        }  
    }  
    return result.reverse().join('');  
}

调用:

dazhenghsuAdd('123456789','987456321')
  • MonikaCeng (作者)

    好的,我试试看

    2021-05-20 20:28

  • MonikaCeng (作者)

    可以,多谢~


    return dazhenghsuAdd(Number('0xaabbccddeeff').toString(10), Number('0xaabbccddeeff').toString(10)) // "35240139748369140547573850625"

    2021-05-20 23:20

  • MonikaCeng (作者)

    可惜不是乘法

    2021-05-20 23:21

该问题目前已经被锁定, 无法添加新回复