parseInt()

parseInt() 함수는 문자열 인자를 구문분석하여 특정 진수(수의 진법 체계에 기준이 되는 값)의 정수를 반환합니다.

구문

parseInt(string, radix);

매개변수

string
분석할 값. 만약 string이 문자열이 아니면 문자열로 변환(ToString 추상 연산을 사용)합니다. 문자열의 선행 공백은 무시합니다.
radixOptional
string이 표현하는 정수를 나타내는 2와 36 사이의 진수(수의 진법 체계에 기준이 되는 값). 주의하세요-기본값이 10이 아닙니다!

아래의 설명은 radix가 제공되지 않았을때 무엇이 발생하는지 상세하게 설명하고 있습니다.

반환 값

주어진 string로부터 분석한 정수.

또는 아래의 경우에는 NaN을 반환합니다

  • radix가 2보다 작거나 36보다 큰 경우
  • 첫번째 non-whitespace 문자가 숫자로 변환되지 않는 경우

설명

parseInt 함수는 첫 번째 인자를 문자열로 변환하고 파싱하고,  그 문자열을 파싱하여 정수나 NaN을 리턴합니다.

만약 NaN이 아니면, 첫번째 인자를 특정 radix(진수) 값으로 표현한 정수가 반환됩니다. (예를 들면, radix가 10인 경우 십진수로 변환하며, 8인 경우는 8진수로, 16인 경우 16진수 등등으로  변환합니다.)

radix 가 10 이상인 경우, 9보다 큰 숫자들은 알파벳 문자로 나타내집니다. 예를 들면, 16 진수의 경우, A부터 F가 사용됩니다.

만약 parseInt 함수가 특정 진수를 나타내는 숫자가 아닌 글자를 마주치게 되면, 이 글자와 계속되는 글자들은 전부 무시되며, 파싱된 정수값을 리턴합니다. parseInt 함수는 정수값으로 숫자를 잘라버립니다. 맨 앞의 공백과 그 뒤의 공백들은 허용됩니다.

일부 숫자들은 문자열 표현에 e 문자를 사용하기 때문에(예: 6.022 × 1023의 경우 6.022e23 ) 숫자를 자르기 위하여 parseInt를 사용하는 것은 매우 크거나 매우 작은 숫자에 사용하는 경우 예기치 않은 결과가 발생합니다. parseIntMath.floor()의 대체품으로 사용해서는 안 됩니다.

parseInt는 양수를 의미하는 기호와 음수를 나타내는 - 기호를 정확히 이해합니다(ECMAScript 1 이후). 공백이 제거된 후 구문 분석의 초기 단계로 수행됩니다. 기호를 찾을 수 없으면 알고리즘이 다음 단계로 이동하고, 그렇지 않으면 기호를 제거하고 문자열의 나머지 부분에서 숫자 파싱을 실행합니다.

만약 radixundefined 이거나 0이라면, (또는 없다면), JavaScript 는 아래와 같이 임의 처리합니다. :

  1. 인풋 값 string 이 "0x" 나 "0X"로 시작한다면, radix 는 16(16진)이며, 나머지 문자열은 파싱됩니다.
  2. 인풋 값 string 이 "0"으로 시작한다면, radix 는 8(8진)이거나, 10(십진)입니다. 정확히 이 선택된 radix 는 구현 의존적적입니다. ECMAScript 5 는 10(십진)이 사용되는 것을 명시하지만, 모든 브라우저가 아직 이렇게 되지 않습니다. 이러한 이유로 항상 parseInt를 사용할 때는 radix 값을 명시해야 합니다.
  3. 인풋 값 string 이 다른 값으로 시작 된다면, radix 는 10(십진)입니다.

첫 번째 글자가 숫자로 변환될 수 없다면, parseIntNaN을 리턴할 것입니다.

연산의 경우, NaN 값은 어떠한 radix 숫자도 아닙니다. parseInt 값이 NaN인지 알아내기 위해 isNaN 함수를 호출할 수 있습니다. 만약 NaN이 산술 연산으로 넘겨진다면, 이 연산의 결과 또한 NaN이 될 것입니다.

특정 진수의 스트링 리터럴로 숫자를 변환하는 것은 intValue.toString(radix)를 사용합니다.

BigInt 주의: parseIntBigInt를 Number으로 변환하여 정확성을 떨어뜨립니다. 이는 "n"을 포함한 숫자가 아닌 값은 삭제되기 때문입니다.

radix가 없는 8진 해석

비록 ECMAScript 3 에서 권장되지 않고, ECMAScript 5 에서 금지되었지만, 많은 구현들은 0으로 시작하는 8진수 문자열을 해석합니다. 다음의 코드는 8진 결과를 가질 수도 있으며, 10진의 결과를 가질 수도 있습니다. 항상 이러한 명확하지 않은 표현은 피하고 radix를 명시하도록 합니다.

parseInt("0e0"); // 0
parseInt("08"); // 0, '8' 은 8진수가 아니다.

ECMAScript 5는 8진수 해석을 삭제하였습니다.

ECMAScript 5의 parseInt 함수 스펙은 더 이상 0 으로 시작하는 8진수 값의 문자열을 다루는 구현을 허용하지 않습니다. ECMAScript 5는 다음을 발표했습니다. :

parseInt 함수는 특정 radix(진수)값에 따라 문자열 아규먼트 내용의 해석을 하고, 그 영향을 받은 정수 값을 생성합니다. 문자열 내에서 시작되는 부분에 위치한 공백은 무시됩니다. 만약 radix 값이 정의되지 않거나, 0이라면, 이것은 10진수로 여겨집니다. 0x 이나 0X 으로 시작되는 숫자 일 때는 16진수로 여겨집니다.

ECMAScript 3 와의 차이는 8진수의 해석을 허용하고 있느냐의 차이입니다.

많은 구현들이 2013부터 이 방식을 채택하고 있지 않아 왔습니다. 오래된 브라우저는 지원되어야 하기 때문에 항상 radix 값을 명시 해야합니다.

더 엄격한 파싱 함수

가끔은 int 값을 파싱할 때 더 엄격한 방식을 이용하는 것이유용합니다. 정규 표현식이 도움이 될 것입니다. :

filterInt = function (value) {
  if(/^(\-|\+)?([0-9]+|Infinity)$/.test(value))
    return Number(value);
  return NaN;
}

console.log(filterInt('421'));               // 421
console.log(filterInt('-421'));              // -421
console.log(filterInt('+421'));              // 421
console.log(filterInt('Infinity'));          // Infinity
console.log(filterInt('421e+0'));            // NaN
console.log(filterInt('421hop'));            // NaN
console.log(filterInt('hop1.61803398875'));  // NaN
console.log(filterInt('1.61803398875'));     // NaN

예제

parseInt() 사용하기

다음의 예제는 모두 15를 리턴합니다.

parseInt(" 0xF", 16);
parseInt(" F", 16);
parseInt("17", 8);
parseInt(021, 8);
parseInt("015", 10);   // parseInt(015, 10);  13이 리턴될 것입니다.
parseInt(15.99, 10);
parseInt("15,123", 10);
parseInt("FXX123", 16);
parseInt("1111", 2);
parseInt("15*3", 10);
parseInt("15e2", 10);
parseInt("15px", 10);
parseInt("12", 13);

다음의 예제는 모두 NaN을 리턴합니다.

parseInt("Hello", 8); // 전부 숫자가 아님.
parseInt("546", 2);   // 숫자는 2진법 표현이 불가능함.

다음의 예제는 모두 -15을 리턴합니다. :

parseInt("-F", 16);
parseInt("-0F", 16);
parseInt("-0XF", 16);
parseInt(-15.1, 10)
parseInt(" -17", 8);
parseInt(" -15", 10);
parseInt("-1111", 2);
parseInt("-15e1", 10);
parseInt("-12", 13);

다음의 예제는 모두 4를 리턴합니다.

parseInt(4.7, 10)
parseInt(4.7 * 1e22, 10)        // 매우 큰 숫자가 4가 됨
parseInt(0.00000000000434, 10)  // 매우 작은 숫자가 4가 됨

만약 숫자가 1e+21과 같거나 큰 경우, 또는 1e-7과 같거나 작은 경우, 1을 리턴합니다.(radix가 10인 경우)

parseInt(0.0000001,10);
parseInt(0.000000123,10);
parseInt(1e-7,10);
parseInt(1000000000000000000000,10);
parseInt(123000000000000000000000,10);
parseInt(1e+21,10);

다음의 예제는 모두 224를 리턴합니다.

parseInt("0e0", 16);

BigInt 는 정확성을 잃습니다.

parseInt('900719925474099267n')
// 900719925474099300

parseInt 는 숫자구분자와 같이 작동하지 않습니다.

parseInt('123_456')
// 123

명세

브라우저 호환성

BCD tables only load in the browser

같이 보기