为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

偶然的你 2022-06-09 16:44:55
我正在尝试将以下二进制(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 中使用。
查看完整描述

2 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

在这里,您的问题的一个非常紧凑的解决方案只需0b在您的号码前面添加,然后作为BigInt


function binaryToDecimal(binaryVal) {

   return BigInt(`0b${binaryVal}`)

}


查看完整回答
反对 回复 2022-06-09
?
互换的青春

TA贡献1797条经验 获得超6个赞

你可以考虑BigInt减少。


var factor = BigInt(2),

    binary = '1000000010000001000011111111100100010110011001011001110111000111',

    decimal = Array

        .from(binary, BigInt)

        .reduce((r, b) => r * factor + b, BigInt(0));

    


console.log(decimal.toString());


查看完整回答
反对 回复 2022-06-09
  • 2 回答
  • 0 关注
  • 204 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信