your programing

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

lovepro 2020. 9. 28. 09:52
반응형

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
  • parseInt19 진법에서 18 인 Infinity것을 읽고 즐겁게 메모합니다.I
  • parseInt 변환 할 수 없기 때문에 나머지 문자열을 무시합니다.

모든 염기에 대한 결과를 얻지 >= 19만 그 이하의 염기에 대해서는 결과를 얻지 못합니다. 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)유효한 숫자입니다. 따라서 "Infinity"에서 I19 진법을 취하고 18 진법이되는 10 진법으로 변환합니다. 그런 다음 n19 진법에없는 다음 문자를 취하려고합니다. 따라서 다음 문자를 버립니다 (자바 스크립트의 문자열을 숫자로 변환하는 동작에 따라 )

따라서 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

참고 URL : https://stackoverflow.com/questions/11340673/why-does-parseint1-0-19-return-18

반응형