如何将带有前导零的十进制数字转换为字符串

时间:2015-10-22 22:52:47

标签: javascript

有没有办法在javascript中将带有前导零的十进制数转换为字符串?好像javascript只是没有带有前导零的十进制数字的概念。

我想要的例子

function turnBaseTenNumberToString(num) {
  ...
}

console.log(turnBaseTenNumberToString(010));
// outputs
// '010'

我应该注意以下内容不起作用 Number.prototype.toString(小于基数&GT)

console.log((010).toString(10))
// outputs
// '8'

我假设是在调用toString之前计算数字的结果。

2 个答案:

答案 0 :(得分:4)

问题是十进制整数文字不能有前导零:

DecimalIntegerLiteral ::
    0
    NonZeroDigit DecimalDigits(opt)

但是,ECMAScript 3允许(作为可选扩展)解析基数为8的前导零的文字:

OctalIntegerLiteral ::
    0 OctalDigit
    OctalIntegerLiteral OctalDigit

ECMAScript 5禁止在严格模式下执行此操作:

  

在处理strict mode code (see 10.1.1)时,符合要求的实现不得扩展 NumericLiteral 的语法,以包含 OctalIntegerLiteral ,如B.1.1中所述。

ECMAScript 6引入了 BinaryIntegerLiteral OctalIntegerLiteral ,所以现在我们有了更多连贯的文字:

  • BinaryIntegerLiteral ,前缀为0b0B
  • OctalIntegerLiteral ,前缀为0o0O
  • HexIntegerLiteral ,前缀为0x0X

旧的 OctalIntegerLiteral 扩展程序已重命名为 LegacyOctalIntegerLiteral ,在非严格模式下仍允许使用此扩展程序。

因此,010是语法错误,某些浏览器只能在非严格模式下容忍。但是你不能依赖它,即便如此它也会产生数字8

答案 1 :(得分:1)

根据OP

  

将带有前导零的十进制数字转换为字符串

嗯,JavaScript将前导零视为值为基数为8的指示符。因此,当将数字定义为010时,十进制系统中的数值为8 (1 * 8^1 + 0 * 8^0)

如果你想避免这种情况,你应该在字符串表示中传递一个数字,并在需要时删除前导零。

function turnBaseTenStringToNumber(num) {
  return parseInt(num.replace(/^0+/, ''));
}

console.log(turnBaseTenStringToNumber(`010`));
// outputs 10

有关详细信息,请参阅基数documentation的数字。