블로그 이미지
소낑
혼자 정리하고 혼자 보는 초보개발자 소끼월드

calendar

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

Notice

Tag

'2018/04'에 해당되는 글 1

  1. 2018.04.19 parseInt(0.0000001) = 1, parseInt(0.000001) = 0인 이유
2018. 4. 19. 10:52 FRONT-END/Javascript

const x1 = parseInt(0.000001);

const x2 = parseInt(0.0000001);


console.log(`x1 = ${x1}\nx2 = ${x2}`);


출력결과 

====================

x1 = 0

x2 = 1

====================


이유: 

javascript parseInt() 함수 (parseInt(string, radix)) 호출하면,

데이터 선처리로 앞에 string은 toString() 함수로 한번 변환 된 후 정수형으로 계산됨

toString()함수에서 숫자를 변환할때 (10^k) 에서 k의 범위에 따라 처리되는 로직이 다른데


k < -6 일때; toString은 단일자릿수로 구성된 문자열 반환하고 그 다음 소문자 e , 숫자 형태의 지수표현을 반환

지수표현 예시) 0.000001   -> 1e-6       0.0000001 -> 1e-7


결국, 0.000001 (le-6)은 "0.000001" 반환, 0.0000001 (1e-7)은 "1e-7"을 반환


parseInt()로 다시 돌아와서,

parseInt(string, radix)에서 string을 "le-7"로 받았을때 parseInt는

0x / 0X가 아닌 문자가 포함된 문자열을 받을 경우 최초 문자만 정수형으로 계산

EX) "22NASD" -> 22

      "22MNA4DSA" -> 22


따라서, 0.0000001 -> toString() -> "1e-7" -> parseInt("1e-7") -> 1



참고:

http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.2.2 

(15.1.2.2 parseInt(string, radix))

(9.8.1 ToString -> ToString Applied to the Number Type)

posted by 소낑
prev 1 next