[Cookbook] 숫자와 수학 연산 다루기




Chapter 5. 숫자와 수학 연산 다루기




JS에서 숫자와 숫자 연산은 Number와 Math라는 두 개의 객체를 활용한다.




1. Number 객체와 리터럴


1.1. JS의 모든 숫자(-2의 53승 ~ 2의 53승)는 부동 소수점(10.23과 같이 소수 부분이 있는 10진수를 의미)이다.


1.2. Number 리터럴에서 객체(Number) 맴버 접근 시 JS 엔진은 즉시 Number 객체를 만들어 해당 Number 리터럴을 Wrapping 시킨 후 메서드를 호출한다. 또한, 메서드 종료 시 자동 생성된 Number 객체를 소멸 시킨다.(String 리터럴과 동일)


1.3. Number 객체는 직접 접근해야 하는 몇 가지 정적(Static) 맴버를 포함하며, 그 중 NaN(Not a Number)이라는 속성은 전역으로 정의된 NaN과 동일한 값으로 "숫자가 아닌 값"을 나타낸다.





참고 사이트:

자바스크립트 부동 소수점 방식에 대한 이해:

자바스크립트 산술연산(부동소수점 연산) 오류 / 자바스크립트 소숫점 연산 문제:




2. Math 객체

2.1. Math 객체는 Number 객체와 달리 따로 생성자가 존재하지 않으며, 모든 맴버는 정적(Static)으로 이루어져 있다. 즉, Math 객체는 new 연산자를 통한 인스턴스 생성이 불가능 하며, obj.Method(static) 형식으로 접근한다.







3. 10 진수를 여러 진수로 변환하기

아래 코드와 같이 Number 객체의 toString() 메서드를 통해 모든 진수(2진수 ~ 36진수)변환이 가능 하지만 숫자로 직접 다룰 수 있는 것은 8진수, 16진수, 10진수 뿐이다.

 





4. 문자열을 숫자로 변환하기


JS 전역 함수인 parseInt는 두 개의 인수를 갖는다. 


첫 번째 인수로 숫자 또는 숫자로된 문자열을 할당하며, 두 번째 인수로는 첫 번째 인수가 가진 해당 진법(기본 10진수)을 할당한다.



또한, 숫자로된 문자열이 포함되지 않았다면 해당 함수는 "NaN"을 반환하며, 만약 문자열의 일부만 숫자인 경우 숫자가 아닌 "값" 바로 앞까지만 반환해준다.(무지 친절한듯 하다.)






5. parseFloat 함수


모든 숫자가 정수라고 확신할 수 없다면, 정수와 실수 모두를 다룰 수 있는 함수인 parseFloat을 사용하는 것이 가장 좋습니다.





참고 사이트:


Math API:

http://koxo.com/lang/js/method/jsGroup.html#JNumber