【发布时间】:2011-09-30 12:11:50
【问题描述】:
基数实际上是什么意思?为什么我们需要它?
parseInt(10, radixValue);
【问题讨论】:
标签: javascript
基数实际上是什么意思?为什么我们需要它?
parseInt(10, radixValue);
【问题讨论】:
标签: javascript
您可能并不总是希望将整数解析为以 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。不过,不同的浏览器可能有不同的行为。始终包含基数以获得可靠的结果。
parseInt(x, 0) 出于某种原因我现在不记得了.. 这是否等于parseInt(x, 10) 我现在想知道...
因为如果你有一个像 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
【讨论】:
0o instead of 0
' 还是双 " 引用数字输入。
基数是记数系统的基础。数字系统有无数种,但大多数人都熟悉的是以 10 为底(十进制)和以 2 为底(二进制)。
数值可以在不同的基础上进行不同的解释。比如二进制的10可以用十进制的2来表示。
在parseInt() 的情况下,基数允许您指定要使用的基数。默认情况下,使用 10 的基数。
但是,基数应始终指定,即使使用基数为 10 时也是如此。考虑
的情况parseInt("010") // 返回 8
乍一看,您可能期望该语句返回 10。显式使用基数有助于避免混淆:
parseInt("010", 10) // 返回:10
【讨论】:
基数是数字系统的基数:http://en.wikipedia.org/wiki/Radix
通常,如果您希望它不同于 10,则只需指定基数。更具体地说(来自http://www.w3schools.com/jsref/jsref_parseInt.asp):
如果radix参数被省略, JavaScript 假设如下:
如果字符串以“0x”开头,则 基数是 16(十六进制)如果 字符串以“0”开头,基数为 8 (八进制)。此功能已弃用如果 字符串以任何其他开头 值,基数为 10(十进制)
【讨论】:
只需添加一些可以明确回答问题的附加信息:
如果 radix 未定义或为 0(或不存在),JavaScript 假定如下:
【讨论】:
这只是我的意见,但“我们需要使用基数”的想法很快就会过时。这个问题确实是前一段时间的实际问题,因为 IT 界以外的人通常不使用十进制以外的数字符号,并且经常提供像“010”这样的零填充十进制数字。但是由于 JS 中的 ECMAScript 6 八进制数字以“0o”为前缀,而不仅仅是 ECMAScript 5 和 3 中的“0”。因此,如果您不针对 IE 系列(现在这种情况并不罕见),您可以跳过基数安全。
【讨论】:
paseInt() 中的 radix 是什么?
parseInt() 函数解析一个字符串并返回一个整数。 radix 需要第二个参数,指定字符串中数字的基数。 radix 可以是2 和36 之间的整数。
函数调用看起来像(语法):
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(),作为第一个参数传递的字符串属于特定系统(二进制、十六进制等),需要将其转换为整数作为最终产品。
【讨论】:
我在 2011 年学到了在使用 parseInt 时总是需要提供基数的艰难方法。但在现代浏览器中,他们似乎“修复”了它。
如果您对以 0 开头的字符串运行函数,它将使用基数 10 对其进行解析。但如果您出于某种原因在数字上运行它,那么它仍将使用基数 8,如 MDN 中所述。
console.log(parseInt('015'));
// This returns 15
console.log(parseInt(015));
// This returns 13
【讨论】:
radix参数用于指定 使用哪种数字系统,用于 例如,基数 16(十六进制) 表示中的数字 字符串应该从 十六进制数转十进制 号码。
如果radix参数被省略, JavaScript 假设如下:
如果字符串以“0x”开头,则 基数是 16(十六进制)
如果字符串以“0”开头,则 基数是 8(八进制)。这个功能是 已弃用
如果字符串以任何其他开头 值,基数为 10(十进制)
【讨论】: