【问题标题】:Why do we need to use radix parameter when calling parseInt?为什么我们在调用 parseInt 时需要使用 radix 参数?
【发布时间】:2011-09-30 12:11:50
【问题描述】:

基数实际上是什么意思?为什么我们需要它?

parseInt(10, radixValue); 

【问题讨论】:

标签: javascript


【解决方案1】:

您可能并不总是希望将整数解析为以 10 为底的数字,因此提供基数允许您指定其他数字系统。

基数是单个数字的值的数量。十六进制为 16。八进制为 8,二进制为 2,依此类推...

parseInt() 函数中,您可以做几件事来提示基数而不提供它。如果用户输入的字符串与其中一条规则匹配但没有明确表示,这些也可能对您不利。例如:

// Numbers with a leading 0 used a radix of 8 (octal) before ECMAScript 5.
// These days, browsers will treat '0101' as decimal.
var result = parseInt('0101');

// Numbers that start with 0x use a radix of 16 (hexidecimal)
var result = parseInt('0x0101');

// Numbers starting with anything else assumes a radix of 10
var result = parseInt('101');

// Or you can specify the radix, in this case 2 (binary)
var result = parseInt('0101', 2);

【讨论】:

  • 所以 parseInt('0101') 给出 101 或 65 ?
  • @Vivekh - 当我最初发布答案时,它曾经支持它 2011 年。快速检查谷歌浏览器似乎表明它们已经发生了一些变化。 parseInt('0101') 现在返回 101。不过,不同的浏览器可能有不同的行为。始终包含基数以获得可靠的结果。
  • @Vivekh - 你可以在developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…看到最新的文档
  • 最新的文档是 ES 5 确实指定不应将任何基数视为与传递 10 相同,但警告您无论如何都要传递它以支持旧版浏览器。
  • 我一直使用parseInt(x, 0) 出于某种原因我现在不记得了.. 这是否等于parseInt(x, 10) 我现在想知道...
【解决方案2】:

因为如果你有一个像 0700 这样的字符串数字并且希望输出是整数 700 你需要通知 parseInt() 它是一个十进制数而不是八进制数。

console.log(parseInt("0700"));
// 448

// I really wanted decimal (base 10)
console.log(parseInt("0700", 10));
// 700

// What is this? Binary, Decimal, Octal?
console.log(parseInt("0110"));
// 72

// as binary
console.log(parseInt("0110", 2));
// 6
注意我只回答了你的问题的一半。有关基数实际上是什么的良好定义,请参见其他人。

【讨论】:

  • 另外,二进制 parseInt('10101', 2)
  • console.log(parseInt("0700"));正在返回 //700 而不是 448。
  • @Naren 8 年前在我运行它的任何浏览器控制台中都是 448。在现代 Chrome 和 Node 中,我今天也得到了 700,但当时可能是未定义的行为。跨度>
  • @MichaelBerkowski 最近我注意到了这种差异——显然是ES6 octal numbers start with 0o instead of 0
  • @Naren, @MichaelBerkowski:刚刚在开发工具中做了一个愚蠢的快速检查,发现行为是不同的,具体取决于我是使用单个 ' 还是双 " 引用数字输入。
【解决方案3】:

基数是记数系统的基础。数字系统有无数种,但大多数人都熟悉的是以 10 为底(十进制)和以 2 为底(二进制)。

数值可以在不同的基础上进行不同的解释。比如二进制的10可以用十进制的2来表示。

parseInt() 的情况下,基数允许您指定要使用的基数。默认情况下,使用 10 的基数。

但是,基数应始终指定,即使使用基数为 10 时也是如此。考虑

的情况

parseInt("010") // 返回 8

乍一看,您可能期望该语句返回 10。显式使用基数有助于避免混淆:

parseInt("010", 10) // 返回:10

【讨论】:

  • 也许它会改变,但在节点和 chrome 控制台中它返回 8 而没有基数 10
  • > "默认使用 10 的基数。",这是不正确的,MDN 文档清楚地说:“小心——这并不默认为10!"
【解决方案4】:

基数是数字系统的基数:http://en.wikipedia.org/wiki/Radix

通常,如果您希望它不同于 10,则只需指定基数。更具体地说(来自http://www.w3schools.com/jsref/jsref_parseInt.asp):

如果radix参数被省略, JavaScript 假设如下:

如果字符串以“0x”开头,则 基数是 16(十六进制)如果 字符串以“0”开头,基数为 8 (八进制)。此功能已弃用如果 字符串以任何其他开头 值,基数为 10(十进制)

【讨论】:

    【解决方案5】:

    只需添加一些可以明确回答问题的附加信息:

    如果 radix 未定义或为 0(或不存在),JavaScript 假定如下:

    • [...]
    • 如果输入字符串以“0”开头,则基数为 8(八进制)或 10(十进制)。确切选择哪个基数取决于实现。 ECMAScript 5 指定使用 10(十进制),但并非所有浏览器都支持这一点。因此,在使用 parseInt 时始终指定一个基数。
    • [...]

    来源:MDN parseInt()

    【讨论】:

      【解决方案6】:

      这只是我的意见,但“我们需要使用基数”的想法很快就会过时。这个问题确实是前一段时间的实际问题,因为 IT 界以外的人通常不使用十进制以外的数字符号,并且经常提供像“010”这样的零填充十进制数字。但是由于 JS 中的 ECMAScript 6 八进制数字以“0o”为前缀,而不仅仅是 ECMAScript 5 和 3 中的“0”。因此,如果您不针对 IE 系列(现在这种情况并不罕见),您可以跳过基数安全。

      【讨论】:

        【解决方案7】:

        paseInt() 中的 radix 是什么?

        parseInt() 函数解析一个字符串并返回一个整数。 radix 需要第二个参数,指定字符串中数字的基数radix 可以是236 之间的整数。

        函数调用看起来像(语法):

        parseInt(string, radix);
        

        一些例子来阐明基数

        的概念

        示例 1:

        var a = parseInt("11", 2);
        

        radix 变量表示“11”在 二进制系统中,或以 2 为底。因此,本示例将字符串“11”转换为整数 3。

        示例 2:

        var a = parseInt("10011", 16);
        

        radix 告诉parseInt() 10011 是一个十六进制数,因此在整数中,它被转换为65553

        基本上,长话短说,radix 参数告诉parseInt(),作为第一个参数传递的字符串属于特定系统(二进制、十六进制等),需要将其转换为整数作为最终产品。

        【讨论】:

          【解决方案8】:

          我在 2011 年学到了在使用 parseInt 时总是需要提供基数的艰难方法。但在现代浏览器中,他们似乎“修复”了它。

          如果您对以 0 开头的字符串运行函数,它将使用基数 10 对其进行解析。但如果您出于某种原因在数字上运行它,那么它仍将使用基数 8,如 MDN 中所述。

          console.log(parseInt('015'));
          // This returns 15
          
          console.log(parseInt(015));
          // This returns 13

          【讨论】:

            【解决方案9】:

            radix参数用于指定 使用哪种数字系统,用于 例如,基数 16(十六进制) 表示中的数字 字符串应该从 十六进制数转十进制 号码。

            如果radix参数被省略, JavaScript 假设如下:

            如果字符串以“0x”开头,则 基数是 16(十六进制)

            如果字符串以“0”开头,则 基数是 8(八进制)。这个功能是 已弃用

            如果字符串以任何其他开头 值,基数为 10(十进制)

            来源W3Schools

            【讨论】:

              猜你喜欢
              • 2012-05-11
              • 1970-01-01
              • 2023-04-03
              • 1970-01-01
              • 1970-01-01
              • 2015-07-25
              • 2011-07-05
              • 2016-02-01
              • 1970-01-01
              相关资源
              最近更新 更多