[javascript] parseInt (1/0, 19)가 18을 반환하는 이유는 무엇입니까?

JavaScript 에서 성가신 문제가 있습니다 있습니다.

> parseInt(1 / 0, 19)
> 18

parseInt함수 가 왜 반환 18됩니까?



답변

의 결과는 1/0입니다 Infinity.

parseInt첫 번째 인수를 문자열로 취급합니다. 이는 먼저 문자열이 생성됨을 의미 Infinity.toString()합니다 "Infinity". 따라서 변환을 요청한 것과 동일하게 작동합니다."Infinity" 기본 19에서 십진수 .

밑이 19 인 숫자와 소수 값은 다음과 같습니다.

Base 19   Base 10 (decimal)
---------------------------
   0            0
   1            1
   2            2
   3            3
   4            4
   5            5
   6            6
   7            7
   8            8
   9            9
   a            10
   b            11
   c            12
   d            13
   e            14
   f            15
   g            16
   h            17
   i            18

다음에 발생하는 일은 parseInt입력 "Infinity"을 스캔하여 구문 분석 할 수있는 부분을 찾은 후 첫 번째 부분을 승인 한 후 중지합니다 I( n기본 19의 유효한 숫자가 아니기 때문에 ).

따라서 마치 parseInt("I", 19)위의 표에서 십진수 18로 변환하는 것처럼 호출 한 것처럼 동작 합니다.


답변

이벤트 순서는 다음과 같습니다.

  • 1/0 ~에 평가하다 Infinity
  • parseInt기본 19의 18 인 Infinity메모를 읽고 행복하게 읽습니다.I
  • parseInt 문자열을 변환 할 수 없으므로 나머지 문자열을 무시합니다.

어떤 base에 대해서도 결과를 얻을 수 >= 19있지만 그 아래 에있는 base 는 그렇지 않습니다. bases의 >= 24경우 n해당 지점에서 유효한 숫자가되므로 더 큰 결과를 얻을 수 있습니다 .


답변

위의 답변에 추가하려면 다음을 수행하십시오.

parseInt는 문자열을 숫자로 구문 분석하기위한 것입니다 (단서는 이름에 있습니다). 귀하의 상황에서는 1/0이 이미 숫자이므로 구문 분석을 전혀 원하지 않으므로 기능의 이상한 선택입니다. 숫자가 있고 특정 기준으로 변환하려면 대신 기수와 함께 toString을 사용해야 합니다.

var num = 1 / 0;
var numInBase19 = num.toString(19); // returns the string "Infinity"


답변

위의 답변에 추가하려면

parseInt(1/0,19) 에 해당 parseInt("Infinity",19)

기본 19 자리 이내 0-9이며 A-I (or a-i)유효한 숫자입니다. 따라서 “무한대” I에서 기본 19를 취하고 기본 10으로 변환하여 18이됩니다. 그러면 다음 문자를 가져 오려고합니다.n 기본 19에없는 (따라서 자바 스크립트의 문자열을 숫자로 변환하는 동작에 따라) )

따라서 parseInt("Infinity",19)OR parseInt("I",19)OR 를 쓰면 parseInt("i",19)결과는 동일 18합니다.

당신이 쓰는 지금, 만약 parseInt("I0",19)결과가 될 것 342
으로 I X 19 (the base)^1 + 0 X 19^0 = 18 X 19^1 + 0 X 19^0= 18 X 19 + 0 X 1 =342

마찬가지로 parseInt("I11",19)결과는6518

  18 X 19^2  +   1 X 19^1   +  1 X 19^0
= 18 X 19^2  +   1 X 19^1   +  1 X 19^0
= 18 X 361   +   1 X 19     +  1 X 1
= 6498  +  19  +  1
= 6518


답변