JavaScript一个接收伪整数(即0100或03)并输出正确整数的函数

时间:2017-04-08 16:46:39

标签: javascript integer decimal

似乎它应该很简单,但我一直在谷歌搜索我的后端,到目前为止还没有能够提出解决方案。我认为这篇文章与我见过的其他很多文章的区别在于我的输入是一个整数,虽然它可能不是一个合适的JS编号。

我正在尝试编写一个带整数的函数(例如0100,010,100,0001),然后输出正确的10整数。

例如,如果函数收到0100我想要输出的是100。

所以,..如果我知道我将收到一个4位数的伪整数,说0100我可以:

function getRealNumber(someNum){
    var realNum = parseInt(someNum, 16);
    return realNum;
}

getRealNumber(0100);

或:

function getRealNumber(someNum){
    var realNum = parseInt(someNum.toString(8));
    return realNum;
}

getRealNumber(0100);

我会返回100,但很明显,如果我收到100则无效。

我以为我可以先将输入转换为字符串,然后将其解析为指定基数为10的整数,如下所示:

function getRealNumber(someNum){
   var someNumString = someNum.toString();
   var realNum = parseInt(someNumString, 10);
   return realNum;
}

getRealNumber(0100);

但这导致64。

所以我认为我坚持确定收到的整数的格式(即hex,oct)。

感谢您的帮助,对不起,如果我错过了一些明显的事情。

2 个答案:

答案 0 :(得分:2)

您需要提供伪整数作为字符串。如果输入数字文字,则Javascript编译器会在调用parseInt()之前将其解析为数字,并且Javascript编译器会将以0开头的数字视为八进制。所以它应该是:



function getRealNumber(someNum){
    var realNum = parseInt(someNum, 10);
    return realNum;
}

console.log(getRealNumber('0100'));




答案 1 :(得分:0)

0开头的整数文字被视为基数为8或八进制的数字,与以0x开头的整数被视为基数为16或十六进制的方式相同。我不知道字符串内的整数是否也会发生同样的情况。

01 === 1
010 === 8
0100 === 64
...

尝试输入0109。你应该得到一个错误-9不是一个有效的八进制数字。但说实话,我从未使用八进制数字。