Javascript/개념

[JS - 놓치기 쉬운 개념] parseInt() 개념 및 주의할 점들

개발자성장기 2023. 9. 5. 13:37
반응형

 

 

 

1. parseInt()

 

parseInt() 함수는 문자열 인자를 파싱하여 특정 진수의 정수를 반환합니다.

parseInt(string);
parseInt(string, radix);
  • `string` : 파싱할 값입니다. 문자열이 아닐 경우 Tostring 추상 연산을 사용해 문자열로 변환합니다.
  • `radix` : (optional) string의 진수를 나타내는 2부터 36까지의 정수입니다. 
    • 기본 값이 10이 아닙니다
    • `Number` 자료형이 아닌 경우 `Number`로 변환합니다.
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)

 

2. 주의해야할 점

 

1. parseInt 의 기본값이 10진수가 아닙니다.

진수 인자로 지정한 값(`radix`)은 (필요한 경우) 숫자로 변환됩니다. 변환 후의 값이 0, `NaN`, `Infinity` 중 하나 (`undefined`는 `NaN`으로 변환)라면 JavaScript는 다음을 가정합니다. 

  1. 입력 값(첫 번째 인수) 즉 파싱할 값이 "0x" 또는 "0X"(숫자 0과 대/소문자 x)로 시작하는 경우 `radix`를 `16`으로 간주하여 나머지 문자열을 16진수로 파싱합니다.   
  2. 입력 값이 그 외의 다른 값으로 시작하면 `radix`는 10(10진수)입니다.
console.log(parseInt('0Xa')); // 10
console.log(parseInt('0Xa', 10)); // 0
console.log(parseInt('0Xa', 0)); // 10
console.log(parseInt('0Xa', NaN)); // 10
console.log(parseInt('0Xa', Infinity)); // 10

 

2. `radix`가 2~36의 범위를 벗어나는 경우  parseInt가 `NaN`을 반환합니다.

(0, `NaN`, `Infinity`, `undefined` 제외) 
console.log(parseInt('36', 39)); // NaN

다음과 같은 경우에는 `NaN`을 반환합니다.

  • `radix`가 2보다 작거나 36보다 큰 경우
  • 공백이 아닌 첫 문자를 숫자로 변환할 수 없는 경우(단, 양의 부호 `+`와 음의 부호 `-`는 인식합니다.)

 

3. `NaN` 값은 모든 진수에서 숫자가 아닙니다.

console.log(parseInt(NaN, 2)); // NaN

 

4. `number.toString(radix)`와 헷갈리면 안됩니다. 

`parseInt()`:  문자열 인자를 파싱하여 특정 진수의 정수를 반환

`number.toString(radix)` : 숫자를 특정 진수의 문자열 리터럴로 변환

parseInt("546", 2); // NaN  -> 0과 1을 제외한 숫자는 2진법에서 유효하지 않습니다.

console.log(parseInt('a', 16)); // 10
console.log(parseInt('101', 2)); // 5
console.log(parseInt('10', 8)); // 8

console.log((10).toString(16)); // 'a'
console.log((5).toString(2)); // '101'
console.log((8).toString(8)); // '10'

 

5. parseInt는 `BigInt` 구문을 `Number`로 반환하므로 정확도를 잃습니다.  

why? 마지막 n 문자를 무시하기 때문입니다. 

console.log(parseInt(4.7 * 1e22, 10)); // 매우 큰 숫자가 4가 됩니다.
parseInt(0.00000000000434, 10); // 매우 작은 숫자가 4가 됩니다.
parseInt("900719925474099267n"); // 900719925474099300

 

6. parseInt 는 숫자 구분 기호와 함께 사용할 수 없습니다.

parseInt("123_456"); // 123

 

 

 


 

Reference

parseInt() - JavaScript - MDN Web Docs

반응형