繁体   English   中英

如何将以零开头的十进制数转换为字符串

[英]How to turn a base ten Number with leading zeros into a string

有什么办法可以将以前导零开头的十进制数转换为javascript中的字符串? 似乎javascript只是没有以十进制数开头的零的概念。

我想要的例子

function turnBaseTenNumberToString(num) {
  ...
}

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

我应该注意以下内容不起作用
Number.prototype.toString(<基数>)

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

我认为这是调用toString之前对数字求值的结果。

问题在于十进制整数文字不能包含前导零:

DecimalIntegerLiteral ::
    0
    NonZeroDigit DecimalDigits(opt)

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

OctalIntegerLiteral ::
    0 OctalDigit
    OctalIntegerLiteral OctalDigit

但是ECMAScript 5禁止以严格模式执行此操作:

一致性实现,在处理时严格模式代码(见10.1.1) ,必须不延伸NumericLiteral的语法,以包括OctalIntegerLiteral如描述B.1.1

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

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

旧的OctalIntegerLiteral扩展名已重命名为LegacyOctalIntegerLiteral ,但仍可以在非严格模式下使用。

因此, 010是语法错误,某些浏览器仅在非严格模式下可以容忍该错误。 但是您不能依靠它,即使那样它也会产生数字8

根据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 

有关更多详细信息,请参见带有基数文档的编号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM