在JavaScript中将十进制打印为二进制

我在某些代码上遇到麻烦,该函数旨在将十进制数字从数组转换为二进制。我正在使用parseInt进行转换,但是它只打印第一个数字,而更频繁地打印NaN。我的目标是在html页面上打印所有与十进制数字等效的二进制数。

这是我的代码:

function decimal_table ()
  {
    // real_array stores decimal numbers.

    const real_array = [];
    const binary_array = [];

       for (let i = 0; i <= 50; i++)
      {
        real_array.push(i);
        document.getElementById("numbers").innerHTML = real_array.join(" ");
      }

       for (let b = 0; b <= 50; b++)
      {
        let calc = parseInt(real_array[b],2);
        binary_array.push(calc);
        document.getElementById("binaries").innerHTML = binary_array.join(" ");
      }
  }

我希望输出看起来像这样:

0 0000
1 0001
2 0010
3 0011
4 0100

以此类推。

wqtan5566 回答:在JavaScript中将十进制打印为二进制

您可以看看

parseInt(real_array[b],2);

其中有一个数字,该数字包含无法通过基数2解析的数字。

2和执行parseInt(2,2)为例。

结果为NaN,因为2不是二进制数字,因为二进制数字只有0和1的数字。

除此之外,它是错误的方向,即二进制→十进制,但是您需要十进制→二进制。


您需要以2为底的Number#toString,并以0开头。

您可以执行一个循环,然后将值添加到数组中。

循环后,对元素进行分配。

function decimal_table() {
    const real_array = [];
    const binary_array = [];

    for (let i = 0; i <= 50; i++) {
        real_array.push(i);
        binary_array.push(i.toString(2).padStart(8,0));
    }

    document.getElementById("numbers").innerHTML = real_array.join(" ");
    document.getElementById("binaries").innerHTML = binary_array.join(" ");
}

decimal_table();
<div id="numbers"></div>
<div id="binaries"></div>

,

您可以对基数为2的整数值使用toString()方法来获取二进制表示形式。

然后您只需填充值即可。

const pad = (n,padding) => (padding + n).substr(-padding.length)

for (let i = 0; i < 8; i++) {
  console.log(pad(i,'  '),pad(i.toString(2),'0000'));
}
.as-console-wrapper { top: 0; max-height: 100% !important; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/string-format/0.5.0/string-format.min.js"></script>


这是一个更高级的自带文档的版本。

const isFunction = (fn) => fn && {}.toString.call(fn) === '[object Function]'
const pad = (n,padding) => (padding + n).substr(-padding.length)
const range = (min,max,step) => {
  if (max === undefined) { max = min; min = 0 }
  if (step === undefined) { step = 1 }
  return new Array(max - min).fill(0).map((_,i) => min + (isFunction(step) ? step(i) : (i * step)))
}

let start = 0
let end = 7
let base = 2
let binStep = n => Math.pow(base,n)                   // 2^n
let maxVal  = binStep(end)                             // 2^7 = 128
let maxLen  = Math.floor(Math.log10(maxVal)) + 1       // 3 (unused)
let decPad  = maxVal.toString(10).replace(/\d/g,' ')  // '   '
let binPad  = maxVal.toString(2).replace('1','0')     // '00000000'

range(start,end + 1,binStep)
  .forEach(n => console.log(pad(n,decPad),pad(n.toString(2),binPad)))
.as-console-wrapper { top: 0; max-height: 100% !important; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/string-format/0.5.0/string-format.min.js"></script>

本文链接:https://www.f2er.com/2960993.html

大家都在问