parseInt를 호출 할 때 왜 radix 매개 변수를 사용해야합니까?


답변:


103

정수를 항상 밑이 10 인 숫자로 구문 분석하지 않을 수도 있으므로 기수를 제공하면 다른 숫자 체계를 지정할 수 있습니다.

기수는 단일 숫자 값의 수입니다. 16 진수는 16입니다. 8 진수는 8, 2 진수는 2, 등등 ...

에서 parseInt()기능을 제공하지 않고 당신이 기수 암시 할 수있는 몇 가지가있다. 사용자가 규칙 중 하나와 일치하지만 명시 적으로 의미하지는 않는 문자열을 입력하는 경우에도 이러한 문제가 발생할 수 있습니다. 예를 들면 :

// Numbers with a leading 0 used a radix of 8 (octal) before ECMAScript 5.
// These days, browsers will treat '0101' as decimal.
var result = parseInt('0101');

// Numbers that start with 0x use a radix of 16 (hexidecimal)
var result = parseInt('0x0101');

// Numbers starting with anything else assumes a radix of 10
var result = parseInt('101');

// Or you can specify the radix, in this case 2 (binary)
var result = parseInt('0101', 2);

2
그래서 parseInt ( '0101')는 101 또는 65를 제공합니까?
Vivekh

7
@Vivekh-내가 원래 답변을 게시했을 때 2011을 뒷받침하는 데 사용되었습니다. Google 크롬의 빠른 확인은 약간 변경되었음을 나타냅니다. parseInt('0101')이제를 반환합니다 101. 하지만 브라우저마다 동작이 다를 수 있습니다. 신뢰할 수있는 결과를 얻으려면 항상 기수를 포함하십시오.
Justin Niessner

@Vivekh - 당신은 가장 최근의 문서를 볼 수 있습니다 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
저스틴 Niessner

가장 최근의 문서는 ES 5가 10을 전달하는 것과 동일한 기수를 처리해서는 안된다고 지정했지만 이전 브라우저 지원을 위해 전달하도록 경고합니다.
후안 멘데스

1
지금은 parseInt(x, 0)기억이 나지 않는 이유로 항상 사용해 왔습니다 . parseInt(x, 10)지금 궁금해하는 것과 같습니다 .
OZZIE

35

같은 문자열 숫자 0700가 있고 출력이 정수가되기를 원한다면 8 진수가 아닌 10 진수임을 700알려야 parseInt()합니다.

console.log(parseInt("0700"));
// 448

// I really wanted decimal (base 10)
console.log(parseInt("0700", 10));
// 700

// What is this? Binary, Decimal, Octal?
console.log(parseInt("0110"));
// 72

// as binary
console.log(parseInt("0110", 2));
// 6
참고 내가 절반 밖에 귀하의 질문에 대답했다. 기수가 실제로 무엇인지에 대한 좋은 정의는 다른 사람들을 참조하십시오.


1
또한, 바이너리에서는 parseInt ( '10101', 2)

1
console.log (parseInt ( "0700")); 448이 아닌 700을 반환합니다.
Naren

@Naren 8 년 전에는 내가 이것을 실행 한 브라우저 콘솔에서 448이었습니다. 최신 Chrome과 Node에서도 오늘 700을 얻었지만 당시에는 정의되지 않은 동작이었을 수도 있습니다.
Michael Berkowski

@MichaelBerkowski 최근에 차이가 있다는 것을 알아 차 렸습니다. ES6 8 진수는 0o대신에 시작합니다0
Sᴀᴍ Onᴇᴌᴀ

7

기수는 계산 시스템의 기본입니다. 무한한 수의 숫자 체계가 있지만 대부분의 사람들에게 익숙한 것은 10 진법 (10 진수)과 2 진법 (이진법)입니다.

숫자 값은 기준에 따라 다르게 해석 될 수 있습니다. 예를 들어 2 진수 10은 10 진수 2로 표현할 수 있습니다.

의 경우 parseInt()기수를 사용하면 사용할 기준을 지정할 수 있습니다. 기본적으로 기수 10이 사용됩니다.

그러나 밑수 10을 사용하는 경우에도 기수는 항상 지정해야합니다.

parseInt("010") // 8을 반환합니다.

언뜻보기에 명령문이 10을 반환 할 것으로 예상 할 수 있습니다. 기수를 명시 적으로 사용하면 혼동을 피하는 데 도움이됩니다.

parseInt("010", 10) // 반환 : 10


4

기수는 숫자 체계의 기본 번호입니다. http://en.wikipedia.org/wiki/Radix

일반적으로 10과 다르기를 원하는 경우에만 기수를 지정하면됩니다.보다 구체적으로 ( http://www.w3schools.com/jsref/jsref_parseInt.asp에서 ) :

radix 매개 변수가 생략되면 JavaScript는 다음을 가정합니다.

문자열이 "0x"로 시작하면 기수는 16 (16 진수)입니다. 문자열이 "0"으로 시작하면 기수는 8 (8 진수)입니다. 이 기능은 더 이상 사용되지 않습니다. 문자열이 다른 값으로 시작하는 경우 기수는 10 (10 진수)입니다.


2

질문에 명확하게 답할 수있는 추가 정보를 추가하면됩니다.

radix가 정의되지 않았거나 0 (또는 부재)이면 JavaScript는 다음을 가정합니다.

  • [...]
  • 입력 문자열이 "0"으로 시작하는 경우 기수는 8 (8 진수) 또는 10 (10 진수)입니다. 정확히 어떤 기수가 선택되는지는 구현에 따라 다릅니다. ECMAScript 5는 10 (십진수)을 사용하도록 지정하지만 모든 브라우저가 아직이를 지원하지는 않습니다. 이러한 이유로 parseInt를 사용할 때 항상 기수를 지정하십시오.
  • [...]

출처 : MDN parseInt ()


2

내 의견 일 뿐이지 만 "기수를 사용해야한다"는 생각은 금방 구식이된다. 문제는 IT 세계 외부의 사람들이 일반적으로 십진수 이외의 숫자 표기법을 사용하지 않고 "010"과 같이 0으로 채워진 십진수를 제공하기 때문에 실제로 얼마 전에 실제로 발생했습니다. 그러나 JS의 ECMAScript 6 8 진수는 ECMAScript 5 및 3에서와 같이 "0"이 아니라 "0o"로 시작되므로 IE 제품군을 대상으로하지 않는 경우 (지금은 드문 상황이 아닙니다) radix를 건너 뛸 수 있습니다. 안전하게.


1

기수 매개 변수는 사용할 숫자 체계를 지정하는 데 사용됩니다. 예를 들어 기수 16 (16 진)은 문자열의 숫자가 16 진 숫자에서 10 진수로 구문 분석되어야 함을 나타냅니다.

radix 매개 변수가 생략되면 JavaScript는 다음을 가정합니다.

문자열이 "0x"로 시작하면 기수는 16 (16 진수)입니다.

문자열이 "0"으로 시작하는 경우 기수는 8 (8 진수)입니다. 이 기능은 더 이상 사용되지 않습니다.

문자열이 다른 값으로 시작하는 경우 기수는 10 (10 진수)입니다.

소스 W3Schools


1

paseInt ()에서 기수 는 무엇입니까 ?

parseInt()함수는 문자열을 구문 분석하고 정수를 반환합니다. 문자열에있는 숫자의 밑지정하는 기수에 대한 두 번째 인수를 사용 합니다 . 기수 의 정수가 될 수 236.

함수 호출은 (구문)과 같습니다.

parseInt(string, radix);

기수 개념을 명확히하는 몇 가지 예

예 1 :

var a = parseInt("11", 2);

기수 변수는 "11"는에 있음을 말한다 이진 시스템, 또는 기본 2 . 따라서이 예에서는 문자열 "11"을 정수 3으로 변환합니다.

예 2 :

var a = parseInt("10011", 16);

다음은 기수는 알려줍니다 parseInt()10011A는 16 진수 따라서 정수에,이 변환됩니다65553

기본적으로 간단히 말해서 기수 인수는 parseInt()첫 번째 매개 변수로 전달 된 문자열이 특정 시스템 (이진, 16 진 등)이고 최종 제품으로 정수로 변환되어야 함을 알려줍니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.