2012-01-30 84 views
3

我将id作为参数传递给javascript函数,因为它来自UI,所以它被留下零填充。但它似乎有(可能)“奇怪”的行为?Javascript,为什么被视为八进制

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,仍然解析为八进制

+0

而不是使用零填充您的数字,请使用空格。 – 2012-01-30 22:25:38

+0

为什么界面留下0填充? – jglouie 2012-01-30 22:26:01

+0

在脚本中使用''use strict''指令可能是个好主意。这将导致八进制文字的任何使用引发错误,并且应该使调试更容易! – 2012-01-30 22:27:23

回答

5

如果您收到您的参数字符串对象,它应该工作使用

parseInt(string, 10) 

解释字符串为十进制,即使他们以0开始。

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

尝试

parseInt('0000022115', 10) 

,而不是

parseInt(0000022115, 10) 

,它给我返回221115。

4

如果以0开始它,它解释为一个八进制数。

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

注意文章的警告在这里:

,除非你是 专门找一个八进制的转换你不应该以零前面一个数字!

考虑找这里的想法上卸下leadings 0: Truncate leading zeros of a string in Javascript

+0

我更新了问题。他们是零填充字符串来自服务器。 – Kossel 2012-01-30 22:43:20

+0

@Kossel - 如此从JavaScript中的字符串中删除零。 – djlumley 2012-01-30 22:47:53

1

领导0小号表明该数字是八进制。

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

0

除非你可以截取这个数字的字符串版本,否则你运气不好。

话虽这么说,如果你能得到你的八进制的字符串版本(呼叫toString()不会帮助),这将工作:

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

尝试

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

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

+0

不;只需使用'parseInt(str,10)'或'parseFloat'。问题是他有一个文字。 – SLaks 2012-01-30 22:33:01