有没有办法在javascript中将带有前导零的十进制数转换为字符串?好像javascript只是没有带有前导零的十进制数字的概念。
我想要的例子
function turnBaseTenNumberToString(num) {
...
}
console.log(turnBaseTenNumberToString(010));
// outputs
// '010'
我应该注意以下内容不起作用 Number.prototype.toString(小于基数&GT)
console.log((010).toString(10))
// outputs
// '8'
我假设是在调用toString之前计算数字的结果。
答案 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 ,所以现在我们有了更多连贯的文字:
0b
或0B
。0o
或0O
。0x
或0X
。旧的 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的数字。