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)
'FRONT-END > Javascript' 카테고리의 다른 글
자바스크립트 이벤트 발생 순서 (0) | 2017.02.02 |
---|---|
var methodName = function(){} vs function methodName(){} 차이 (0) | 2017.01.13 |
자바스크립트 튜토리얼 (0) | 2017.01.13 |