为什么在调用parseInt时需要使用基数参数?


Answers:


103

您可能并不总是希望将整数解析为以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);

2
因此parseInt('0101')给出101或65吗?
Vivekh

7
@Vivekh-2011年,当我最初发布答案时,它曾经支持它。在Google Chrome浏览器中进行的快速检查似乎表明它们已经有所改变。parseInt('0101')现在返回101。但是,不同的浏览器可能会有不同的行为。始终包含基数以获得可靠的结果。
贾斯汀·尼斯纳


最新的文档是ES 5确实指定了基数不应与传递10相同,但是警告您无论如何都应传递它以获取较旧的浏览器支持。
Juan Mendes

1
我一直parseInt(x, 0)出于某种原因使用我现在不记得了..这是否等于parseInt(x, 10)我现在想知道的...
OZZIE

35

因为如果您有一个类似的字符串,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
请注意,我只回答了您一半的问题。请参见其他人,以获得对基数实际含义的良好定义。


1
此外,二进制parseInt('10101',2)

1
console.log(parseInt(“ 0700”)); 返回// 700,而不是448。–
Naren

@Naren 8年前,无论我在其中运行任何浏览器控制台,它的大小都是448。在现代Chrome和Node中,今天我也有700,但这在当时是不确定的行为。
Michael Berkowski

@MichaelBerkowski我最近注意到差异-显然ES6八进制数字以0o代替0
SᴀᴍOnᴇᴌᴀ

7

基数是计算系统的基础。有无数个数字系统,但大多数人熟悉的数字系统是10(十进制)和2(二进制)。

数值可以用不同的基数进行不同的解释。例如,二进制数字10可以表示为十进制2。

对于parseInt(),可以使用基数指定要使用的基数。默认情况下,使用的基数为10。

但是,即使使用base 10,也应始终指定基数。

parseInt("010") //返回8

乍一看,您可能希望语句返回10。明确使用基数将有助于避免混淆:

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


4

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

通常,只需要指定与10不同的基数即可。更具体地说(来自http://www.w3schools.com/jsref/jsref_parseInt.asp):

如果省略了radix参数,则JavaScript假定以下内容:

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


2

只需添加一些其他信息即可清楚地回答该问题:

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

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

资料来源:MDN parseInt()


2

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


1

基数参数用于指定要使用的数字系统,例如,基数16(十六进制)表示应将字符串中的数字从十六进制数字解析为十进制数字。

如果省略了radix参数,则JavaScript假定以下内容:

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

如果字符串以“ 0”开头,则基数为8(八进制)。不推荐使用此功能

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

来源W3Schools


1

paseInt()中的基数是什么?

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

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

parseInt(string, radix);

一些例子来阐明基数的概念

范例1:

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

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

范例2:

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

在这里,基数告诉,parseInt()10011是一个十六进制数,因此以整数形式将其转换为65553

长话短说,基本来说,基数参数告诉我们parseInt()作为第一个参数传递的字符串是特定系统(二进制,十六进制等)的字符串,需要将其转换为整数作为最终乘积。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.