我将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
答案 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'