4

将数字转换为某种未知数字格式的某个数字的前导零。例如 :

017正在转换为15

037正在转换为31

还发现末尾有 8 0r 9 的数字保持不变,例如:

01818

03838

o5959

我发现的另一件事是

对于下一个 10 的范围,转换值和实际值之间的差值增加 2

例如 :

对于范围 00-09 差异, 0 即 07 的值将是 7,04 将是 4

范围 010-019 差异是 2 017 的值将是 15,013 将是 11

范围 020-029 差异是 4 027 的值将是 23,021 将是 17

等等..

这是一个测试片段http://jsfiddle.net/rajubera/BxQHF/

我不明白为什么会这样?

请帮助我如何从前导零的数字中获得正确的十进制数?

4

2 回答 2

6

如果有前导 0,它会将其转换为八进制(以 8 为底),只要它是以 8 为底的有效数字(没有大于 7 的数字)。

例如:

017以 8 为底的是 1 * 8 + 7 = 15 037以 8 为底的是 3 * 8 + 7 = 31

018转换为18因为018不是以 8 为基数的有效数字

请注意,默认情况下将数字转换为哪个基数的行为可能是特定于浏览器的,因此在使用时始终指定基数/基数很重要parseInt

parseInt("017",10) === 17

根据评论更新:

parseInt期望 astring作为第一个参数,所以

parseInt("012",10) === 12

于 2013-07-31T14:33:44.393 回答
1

原因之一"use strict";

(function() {"use strict"; 017})()

// Firefox => SyntaxError: "0"-prefixed octal literals and octal escape sequences are deprecated; for octal literals use the \"0o\" prefix instead 
// Chrome, Node => SyntaxError: Octal literals are not allowed in strict mode.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Deprecated_octal

于 2017-11-12T10:03:03.937 回答