二进制到十进制转换在 JavaScript 中显示大数的错误结果

我正在尝试将以下二进制(64位)数转换为十进制数'1000000010000001000011111111100100010110011001011001110111000111'


但它显示了错误的结果。我正在使用下面的函数来转换数字。


binaryToDecimal(binaryVal) {

    let val = 0,

      finalVal = 0,

      binaryArray = binaryVal.split('');


    for (let index = 0; index < binaryArray.length; index++) {

      if(Number(binaryArray[index])){

        val = Math.pow(2, binaryArray.length - (index + 1));

      }

      finalVal = finalVal + val;

      val = 0;

    }

    return finalVal;

  }

我得到的值:9259699871347483000 正确的结果是:9259699871347482055


请建议是否可以在 JavaScript 中使用。


偶然的你
浏览 205回答 2
2回答

MMMHUHU

在这里,您的问题的一个非常紧凑的解决方案只需0b在您的号码前面添加,然后作为BigIntfunction binaryToDecimal(binaryVal) {&nbsp; &nbsp;return BigInt(`0b${binaryVal}`)}

互换的青春

你可以考虑BigInt减少。var factor = BigInt(2),&nbsp; &nbsp; binary = '1000000010000001000011111111100100010110011001011001110111000111',&nbsp; &nbsp; decimal = Array&nbsp; &nbsp; &nbsp; &nbsp; .from(binary, BigInt)&nbsp; &nbsp; &nbsp; &nbsp; .reduce((r, b) => r * factor + b, BigInt(0));&nbsp; &nbsp;&nbsp;console.log(decimal.toString());
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript