Javascript,为什么被视为八进制

IT技术 javascript
2021-02-20 08:36:59

我将一个 id 作为参数传递给一个 javascript 函数,因为它来自 UI,所以它被填充零。但它似乎有(也许)“奇怪”的行为?

    console.log(0000020948);  //20948
    console.log(0000022115);   //9293 which is 22115's octal 
    console.log(parseInt(0000022115, 10));  // 9293 which is 22115's octal
    console.log(0000033959);  //33959
    console.log(20948);  //20948
    console.log(22115); //22115
    console.log(33959); //33959

我怎样才能确保他们解析到正确的数字?(十进制)

编辑:

只是说得更清楚:

这些数字来自服务器并且是零填充的字符串。我正在为每个人制作一个删除按钮。

喜欢:

function printDelButton(value){
          console.log(typeof value);  //output string 
  return '<a href="#" onclick="deleteme('+value+')"><img src="images/del.png"></a>'
}

and 

function printDelButton(value){
console.log(typeof value); //output numeric
    console.log(value);   //here output as octal .... :S
 }

我试过 :

console.log(parseInt(0000022115, 10));  // 9293 which is 22115's octal

仍然解析为八进制

6个回答

如果您将参数作为字符串对象接收,则应该可以使用

 parseInt(string, 10)

将字符串解释为十进制,即使它们以 0 开头。

在您的测试中,您向 parseInt 方法传递了一个数字,而不是一个字符串,也许这就是它不返回预期结果的原因。

尝试

 parseInt('0000022115', 10)

代替

parseInt(0000022115, 10)

这确实为我返回了 221115。

如果以 0 开头,则将其解释为八进制数。

http://www.hunlock.com/blogs/The_Complete_Javascript_Number_Reference#quickIDX2

请注意此处文章的警告:

除非您专门寻找八进制转换,否则永远不要在数字前面加上零!

考虑在此处查找有关删除前导 0 的想法: 在 Javascript 中截断字符串的前导零

我更新了问题。它们是来自服务器的零填充字符串。
2021-04-29 08:36:59
@Kossel - 所以从 JavaScript 的字符串中删除零。
2021-05-07 08:36:59

前导0s 表示数字是八进制的。

parseInt解析包含数字的字符串。
parseInt(0000022115, 10)传递一个数字文字。JS 解释器以八进制形式解析文字,因此您将原始数值传递给parseInt.

除非你能截获这个数字的字符串版本,否则你就不走运了。

话虽如此,如果您可以获得八进制的字符串版本(调用toString()无济于事),这将起作用:

parseInt(variable_string.replace(/^0+/, ''), 10);

尝试

/^[0]*([1-9]\d)/.exec(numberFromUI)[0]

那应该只给你去掉零的数字(如果你必须支持小数,你需要编辑来解释'.',当然','也很有趣......我真的希望你不要不必处理欧洲人写数字的所有疯狂的不同方式!)

不; 只需使用parseInt(str, 10)parseFloat问题是他有字面意思。
2021-05-15 08:36:59