Javascript,为什么被视为八进制

时间:2012-01-30 22:21:40

标签: javascript

我将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

仍然解析为Octal

6 个答案:

答案 0 :(得分:5)

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

 parseInt(string, 10)

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

在你的测试中,你传递parseInt方法一个数字,而不是一个字符串,也许这就是为什么它没有返回预期的结果。

尝试

 parseInt('0000022115', 10)

而不是

parseInt(0000022115, 10)

确实会为我返回221115.

答案 1 :(得分:4)

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

请参阅http://www.hunlock.com/blogs/The_Complete_Javascript_Number_Reference#quickIDX2

请注意文章的警告:

  

除非你是,否则你不应该在数字前加零   专门寻找八进制转换!

考虑一下这里有关删除引导0的想法: Truncate leading zeros of a string in Javascript

答案 2 :(得分:1)

前导0表示该数字为八进制。

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

答案 3 :(得分:0)

除非你能拦截这个号码的字符串版本,否则你运气不好。

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

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

答案 4 :(得分:0)

尝试

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

这应该只给你一些数字剥离零(如果你必须支持小数,你需要编辑来代替'。',当然','也很有趣......我真的希望你不必处理欧洲人编写数字的所有疯狂的不同方式!)

答案 5 :(得分:0)

如果数字来自服务器,为零填充字符串,则使用neo4j.exceptions.CypherSyntaxError: Invalid input '?': expected '\', ''', '"', 'b', 'f', 'n', 'r', 't', UTF16 or UTF32 (line 1, column 68 (offset: 67))

+"0000022115"

JS仅在有效的八进制数时将零填充数字视为八进制数-如果不是,则将其视为十进制数。不允许自相矛盾的console.log(+"0000022115") if (021 < 019) console.log('Paradox');模式

'use strict'