我试图在不使用parseint((
的情况下创建一个二进制到十进制转换器我的代码:
var inp = `110010`;
var len = inp.length;
var string = inp.split("");
var counter = string.map(function(val,i){
return i;
}).reverse();
var storeBin = string.map(function(val,i){
let x ="";
if(val>0){
x += 2;
}else if(val===0){
x += 0;
}
return Math.pow(string[i]*x,counter[i]);
});
var dec=0; /* output */
for(i=0;i<len;i++){
dec += storeBin[i]
}
console.log("Entered binary "+inp);
console.log("Decimal "+dec);
当我运行它时:
Input: 1010
Output: Entered binary 1010
Decimal 11
但是二进制1010的输出现在应该为10,现在有人可以帮助我在此代码中找到问题
您需要像 return val * Math.pow(2, counter[i]);
一样执行此操作。
var inp = `110010`;
var len = inp.length;
var string = inp.split("");
var counter = string.map(function(val, i) {
return i;
}).reverse();
var storeBin = string.map(function(val, i) {
return val * Math.pow(2, counter[i]);
});
var dec = 0; /* output */
for (i = 0; i < len; i++) {
dec += storeBin[i]
}
console.log("Entered binary " + inp);
console.log("Decimal " + dec);
fyi:与二进制数字的相关数是二进制数字的总和(dn(乘以2(2^n(的功率:
decimalNum = d0 × 2^0 + d1 × 2^1 + d2 × 2^2 + ...
即使您可以使用Array#reduce
方法使其更简单。
var inp = `110010`;
var dec = inp.split('').reduce(function(val, d, i, arr) {
return val + Math.pow(2, arr.length - i - 1) * d;
}, 0);
console.log("Entered binary " + inp);
console.log("Decimal " + dec);
或使用Array#reverse
方法。
var inp = `110010`;
var dec = inp.split('').reverse().reduce(function(val, d, i) {
return val + Math.pow(2, i) * d;
}, 0);
console.log("Entered binary " + inp);
console.log("Decimal " + dec);