首页 > 解决方案 > 如何在没有 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 11 有人可以帮我找到这段代码中的问题吗

标签: javascriptnode.js

解决方案


你需要这样做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);

仅供参考: 二进制数的对应十进制数是二进制数字的总和(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);


推荐阅读