我正在尝试将以下二进制(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}`)
}
互换的青春
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());
添加回答
举报
0/150
提交
取消