【问题标题】:Number.parseInt(input, 2); does not show the binary value after 2 when the input is in decimalNumber.parseInt(输入, 2);输入为十进制时不显示 2 后的二进制值
【发布时间】:2021-01-03 19:19:10
【问题描述】:

这是代码:

var input = prompt("Enter a decimal value");

console.log(input +" the binary value would be:", Number.parseInt(input, 2));

1 和 2 的输出是正确的,但从 3 开始显示 NaN。

它适用于以下代码:

var input = Number(prompt("Enter a decimal value"));

console.log(input +" the binary value would be:", input.toString(input, 2));

我想知道为什么它不适用于第一个代码。

【问题讨论】:

  • 您的第二个代码为 3 产生 10。
  • 与 @Alex 的字符串无关,因为这就是 parseInt 所期望的
  • 问题是二进制的基数是 2,但 OP 没有传递二进制字符串来获得十进制等效值。
  • 我在你的第二次测试中放了一个更高的数字,Uncaught RangeError: toString() radix argument must be between 2 and 36.. 事情变得有趣了
  • @TheBombSquad 这是因为他们将输入作为基数传递。这两个代码示例实际上都没有按照用户的期望进行。

标签: javascript console.log parseint


【解决方案1】:

首先要转换为二进制的方式是不对的。您可以使用input.toString(2) 将十进制转换为二进制。但在此之前,您必须将输入转换为数字,因为提示将返回一个字符串。

您可以执行以下操作,

var input = parseInt(prompt("Enter a decimal value"));

console.log(input +" the binary value would be:",input.toString(2));

【讨论】:

    【解决方案2】:

    来自MDN docs for parseInt

    如果 parseInt 在 指定的基数,它会忽略它以及所有后续字符和 返回解析到该点的整数值。

    然后,

    如果第一个字符不能转换为带基数的数字 在使用中,parseInt 返回 NaN。

    任何第一个字符不是零或一的字符串都将返回NaN

    所以输入 11111 或 101010101 会起作用,但 2 或 3 或 333 不会。

    【讨论】:

      【解决方案3】:

      你的两段代码或多或少是相反的。

      Number.parseInt(input, 2)
      

      … 期望 input 是一个包含二进制数的字符串,它将转换为 JavaScript 数字。

      如果您键入 2,那么这不是一个有效的二进制数(只有 0s 和 1s。


      input.toString(input, 2)
      

      ……错了

      input.toString(2)
      

      ... 期望 input 是一个 JavaScript 数字,并将其转换为包含该数字的十进制表示的字符串。


      比较:

      console.log("Parse binary numbers");
      console.log(Number.parseInt("1", 2));
      console.log(Number.parseInt("10", 2));
      console.log(Number.parseInt("3", 2));
      
      console.log("Convert numbers to binary");
      console.log(1.0.toString(2))
      console.log(2.0.toString(2))
      console.log(3.0.toString(2))

      【讨论】:

      • 你可以写1..toString(2)
      【解决方案4】:

      https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/parseInt

      因此,Number.parseInt 不会转换为二进制,而是从二进制转换。如果您输入 3,您将收到 NaN,因为 3 不是从基数 2 到基数 10 的可能数字解析。

      如果您改为运行此代码...

      var input = prompt("Enter a decimal value");
      
      console.log(input +" the binary value would be:", Number.parseInt(input, 2));

      输入“101”你会得到 5,因为我们正在从二进制转换为十进制。

      【讨论】:

        猜你喜欢
        • 2020-10-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-13
        • 2016-01-24
        • 1970-01-01
        • 1970-01-01
        • 2012-03-28
        • 2013-02-02
        相关资源
        最近更新 更多