Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript-防止八进制转换_Javascript_Regex_Numbers_Octal - Fatal编程技术网

JavaScript-防止八进制转换

JavaScript-防止八进制转换,javascript,regex,numbers,octal,Javascript,Regex,Numbers,Octal,我把一个数字输入作为一个参数,并试图解释前导零。但在我对数字做任何事情之前,javascript似乎先将数字转换成八进制。到目前为止,解决这个问题的唯一方法是,如果我最初将数字作为字符串传递,但我希望在传递之后会有另一种方法来转换它?到目前为止,已尝试(使用提醒我八进制行为的017): 如此给定 function(numb) { if (typeof numb === number) { // remove leading zeroes and convert to decimal } els

我把一个数字输入作为一个参数,并试图解释前导零。但在我对数字做任何事情之前,javascript似乎先将数字转换成八进制。到目前为止,解决这个问题的唯一方法是,如果我最初将数字作为字符串传递,但我希望在传递之后会有另一种方法来转换它?到目前为止,已尝试(使用提醒我八进制行为的
017
):

如此给定

function(numb) {

if (typeof numb === number) {
// remove leading zeroes and convert to decimal
}
else {
 // use parseInt
}

}
“严格使用”似乎也不能像一些老帖子所建议的那样解决这个问题。有什么想法吗

  • 如果你接受“数字输入”,你应该始终保证有一个字符串。据我所知,在这个上下文中没有返回
    数字的输入方法。由于您收到一个字符串,
    parseInt(..,10)
    将始终足够
    017
    仅在源代码中按字面形式写入时(或缺少
    parseInt
    的基数参数时)才解释为八进制
  • 无论出于何种奇怪的原因,如果您最终得到一个解释为八进制的十进制数,并且希望将该值反向转换回十进制数,那么很简单:将该值表示为八进制数,然后将其重新解释为十进制数:

    var oct = 017; // 15
    parseInt(oct.toString(8), 10) // 17
    
    虽然您可能不知道输入最初是否解释为八进制,但这不是您应该做的事情


  • JavaScript解释所有以0开头的数字,并将所有八进制数字都包含为八进制-例如017将是八进制,但019不是。如果您希望您的数字为十进制,则
    1.省略前导的0
    2.继续使用parseInt()

    原因是JavaScript使用了一些隐式转换,并根据数字选择最可能的情况。在JavaScript中,前导0表示数字是八进制的信号。如果需要前导0,则必须接受该规则并使用parseInt()


    如果您在脚本中手动键入数字,则不使用前导零(如果数字是有效的八进制,则隐式地将其视为八进制-如果不是,则将其视为十进制)。如果您将数字作为字符串,则只需使用
    +
    运算符转换为(十进制)数字

    console.log(+“017”)
    
    if(021<019)console.log('Paradox')你如何接受一个数字输入,而不是以字符串的形式输出。。。?!
    数字
    不能有“前导零”。对不起,“数字输入”的意思是我给函数传递一个类似017的数字,而不是“017”。这只是出于兴趣,而不是一个要求,因为我正在考虑发送一些(可能是偶然)有前导零的数字。你的第二个答案也帮了大忙,我没想过要这么做。谢谢你的回答!如果在源代码中编写
    017
    ,作为函数的参数,则编写的是15。只是用不同的符号。数字没有前导零。写下你的意思,不要让你的代码适应你实际上并不想要的东西。
    var oct = 017; // 15
    parseInt(oct.toString(8), 10) // 17