如何在没有ParseInt()的情况下在JavaScript中创建二进制至小数



我试图在不使用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);

最新更新