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

printing decimal to binary in 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

等等。

你可以看看

parseInt(real_array[b], 2);

你有一个数字,其中包含无法通过基数为二来解析的数字。

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

结果是NaN,因为2不是二进制数,因为二进制数只有数字零和一

除此之外,方向不对,二进制→十进制,但你需要十进制→二进制。


您需要 Number#toString 以 2 为底并用零填充开头。

您可以采用单个循环并将值添加到数组。

循环后对元素进行赋值。

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>