parseInt() 전역 함수
parseInt() 전역 함수
parseInt()는 문자열 인자를 파싱해 지정된 진법(radix, 수학적 숫자 체계에서의 밑base)의 정수로 반환하는 전역 함수입니다. 문자열을 숫자로 변환할 때 소수점 이하를 버리고 정수부만 얻거나, 2진수·8진수·16진수 등 특정 진법의 문자열을 해석할 때 주로 사용됩니다.
본문
개요
parseInt() 함수는 문자열 인자를 파싱하고 지정된 radix(수학적 숫자 체계에서의 밑)의 정수를 반환합니다.
기본적인 사용 예는 다음과 같습니다.
console.log(parseInt("123"));
// 123 (default base-10)
console.log(parseInt("123", 10));
// 123 (explicitly specify base-10)
console.log(parseInt(" 123 "));
// 123 (whitespace is ignored)
console.log(parseInt("077"));
// 77 (leading zeros are ignored)
console.log(parseInt("1.9"));
// 1 (decimal part is truncated)
console.log(parseInt("ff", 16));
// 255 (lower-case hexadecimal)
console.log(parseInt("0xFF", 16));
// 255 (upper-case hexadecimal with "0x" prefix)
console.log(parseInt("xyz"));
// NaN (input can't be converted to an integer)
구문(Syntax)
parseInt(string)
parseInt(string, radix)
매개변수
- string — 정수로 시작하는 문자열입니다. 이 인자의 앞부분 공백(whitespace)은 무시됩니다.
- radix (선택) —
string의 radix(수학적 숫자 체계에서의 밑)를 나타내는2에서36사이의 정수입니다. 이 값은 32비트 정수로 변환됩니다. 변환 후 0이 아니면서 [2, 36] 범위 밖이면 이 함수는 항상NaN을 반환합니다.0이거나 제공되지 않으면 radix는string의 값에 따라 추론됩니다. 주의 — 이 값이 항상10으로 기본 설정되는 것은 아닙니다!radix가 제공되지 않을 때의 동작은 아래 설명에서 자세히 다룹니다.
반환값 — 주어진 string에서 파싱된 정수, 또는 다음 경우에 NaN을 반환합니다.
radix가 32비트 정수로 2보다 작거나 36보다 큰 경우, 또는- 첫 번째 비-공백 문자가 숫자로 변환될 수 없는 경우.
참고: JavaScript는 언어 수준에서 "부동 소수점 숫자"와 "정수"를 구분하지 않습니다.
parseInt()와parseFloat()는 단지 파싱 동작만 다를 뿐, 반환값이 반드시 다르지는 않습니다. 예를 들어parseInt("42")와parseFloat("42")는 같은 값인 Number 42를 반환합니다.
설명(Description)
parseInt 함수는 첫 번째 인자를 문자열로 변환하고, 그 문자열을 파싱한 뒤 정수 또는 NaN을 반환합니다.
NaN이 아니라면, 반환값은 첫 번째 인자를 지정된 radix에서 숫자로 취한 정수입니다. (예: radix가 10이면 십진수에서, 8이면 팔진수에서, 16이면 십육진수에서 변환합니다.)
radix 인자는 숫자로 변환됩니다. 제공되지 않거나 값이 0, NaN, Infinity가 되면(undefined는 NaN으로 강제 변환됨) JavaScript는 다음과 같이 가정합니다.
- 입력
string이 (앞쪽 공백과 가능한+/-부호를 제거한 뒤)0x또는0X(0 다음에 소문자 또는 대문자 X)로 시작하면,radix는16으로 가정되고 나머지 문자열은 16진수로 파싱됩니다. - 입력
string이 다른 값으로 시작하면 radix는10(십진수)입니다.
참고: 숫자 리터럴에서 유효한
0b같은 다른 접두사는parseInt()가 일반 숫자로 취급합니다.parseInt()는0으로 시작하는 문자열을 8진수 값으로도 취급하지 않습니다.parseInt()가 인식하는 유일한 접두사는 16진수용0x또는0X뿐이며, 그 외 모든 것은radix가 없으면 십진수 값으로 파싱됩니다. 이들 접두사를 파싱하려면Number()나BigInt()를 대신 사용할 수 있습니다.
radix가 16이면 parseInt()는 선택적 부호 문자(+/-) 뒤에 문자열이 선택적으로 0x 또는 0X로 접두될 수 있게 합니다.
radix 값이(필요시 강제 변환되어) 범위 [2, 36]에 없으면 parseInt는 NaN을 반환합니다.
10보다 큰 진법에서는 영문 알파벳 문자가 9보다 큰 숫자를 나타냅니다. 예를 들어 16진수(base 16)에서는 A부터 F가 사용됩니다. 문자는 대소문자를 구분하지 않습니다.
parseInt는 정확히 두 부호만 이해합니다: 양수를 위한 +, 음수를 위한 -. 이는 공백 제거 후 파싱의 초기 단계로 수행됩니다. 부호가 없으면 알고리즘은 다음 단계로 진행하고, 부호가 있으면 부호를 제거한 뒤 나머지 문자열에 숫자 파싱을 실행합니다.
parseInt가 입력 문자열에서 지정된 radix에서 유효한 숫자가 아닌 문자를 만나면 그 문자와 그 이후의 모든 문자를 무시하고 그 지점까지 파싱된 정수 값을 반환합니다. 예를 들어 parseInt("2", 2)는 2가 이진 숫자 체계에서 유효한 숫자가 아니므로 NaN을 반환합니다. 마찬가지로 1e3이 기술적으로 정수를 인코딩하지만(parseFloat()는 이를 정수 1000으로 올바르게 파싱함), e가 10진수에서 유효한 숫자가 아니므로 parseInt("1e3", 10)는 1을 반환합니다. .도 숫자가 아니므로 반환값은 항상 정수입니다.
첫 번째 문자가 사용 중인 radix로 숫자로 변환될 수 없으면 parseInt는 NaN을 반환합니다. 앞쪽 공백은 허용됩니다.
산술 목적에서 NaN 값은 어떤 진법에서도 숫자가 아닙니다. parseInt의 결과가 NaN인지 확인하려면 Number.isNaN 함수를 호출할 수 있습니다. NaN이 산술 연산에 전달되면 연산 결과도 NaN이 됩니다.
큰 숫자는 문자열 표현에 e 문자를 사용하므로(예: 6.022 × 10^23^에 대해 6.022e23), 매우 크거나 매우 작은 숫자에 parseInt를 사용해 숫자를 절삭하면 예상치 못한 결과가 발생합니다. parseInt는 Math.trunc()의 대체물로 사용해서는 안 됩니다.
숫자를 특정 진법의 문자열 리터럴로 변환하려면 thatNumber.toString(radix)를 사용하십시오.
parseInt()는 숫자를 반환하므로, 문자열이 나타내는 정수가 안전 범위를 벗어나면 정밀도 손실이 발생할 수 있습니다. BigInt() 함수는 BigInt를 반환함으로써 임의 길이 정수를 정확히 파싱하는 것을 지원합니다.
예제
다음 예들은 모두 15를 반환합니다.
parseInt("0xF", 16);
parseInt("F", 16);
parseInt("17", 8);
parseInt("015", 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); // Not a number at all
parseInt("546", 2); // Digits other than 0 or 1 are invalid for binary radix
다음 예들은 모두 -15를 반환합니다.
parseInt("-F", 16);
parseInt("-0F", 16);
parseInt("-0XF", 16);
parseInt("-17", 8);
parseInt("-15", 10);
parseInt("-1111", 2);
parseInt("-15e1", 10);
parseInt("-12", 13);
다음 예는 224를 반환합니다.
parseInt("0e0", 16);
parseInt()는 BigInt 값을 처리하지 못합니다. n 문자에서 멈추고 앞의 문자열을 가능한 정밀도 손실과 함께 일반 정수로 취급합니다.
parseInt("900719925474099267n");
// 900719925474099300
대신 문자열을 (n 문자 없이) BigInt() 함수에 전달해야 합니다.
BigInt("900719925474099267");
// 900719925474099267n
parseInt는 숫자 구분자(numeric separators)와 함께 동작하지 않습니다.
parseInt("123_456"); // 123
비-문자열에 parseInt() 사용하기 — parseInt()는 높은 진법(예: 모든 영숫자 문자를 유효한 숫자로 만드는 36)과 결합하면 비-문자열에서 흥미로운 결과를 낼 수 있습니다.
parseInt(null, 36); // 1112745: The string "null" is 1112745 in base 36
parseInt(undefined, 36); // 86464843759093: The string "undefined" is 86464843759093 in base 36
일반적으로 비-문자열에 parseInt()를 사용하는 것은 좋지 않으며, 특히 Math.trunc()의 대체물로 사용하는 것은 더욱 좋지 않습니다. 작은 숫자에서는 동작할 수 있습니다.
parseInt(15.99, 10); // 15
parseInt(-15.1, 10); // -15
하지만 이것은 단지 이 숫자들의 문자열 표현이 기본 분수 표기법("15.99", "-15.1")을 사용하기 때문에 우연히 동작하는 것일 뿐이며, parseInt()는 소수점에서 멈춥니다. 1e+21 이상 또는 1e-7 이하의 숫자는 문자열 표현에 지수 표기법("1.5e+22", "1.51e-8")을 사용하며, parseInt()는 항상 첫 번째 숫자 뒤에 오는 e 문자나 소수점에서 멈춥니다. 즉 크고 작은 숫자에 대해 parseInt()는 한 자리 정수를 반환합니다.
parseInt(4.7 * 1e22, 10); // Very large number becomes 4
parseInt(0.00000000000434, 10); // Very small number becomes 4
parseInt(0.0000001, 10); // 1
parseInt(0.000000123, 10); // 1
parseInt(1e-7, 10); // 1
parseInt(1000000000000000000000, 10); // 1
parseInt(123000000000000000000000, 10); // 1
parseInt(1e21, 10); // 1