본문 바로가기
JavaScript

JavaScript ) 숫자형 다루기

by 하이방가루 2022. 3. 1.
728x90
반응형

0이 많이 붙은 큰 숫자

0의 개수를 'e'뒤에 추가한다. ex) 123e6은 0이 6개인 숫자, 123000000을 나타낸다.

'e'다음에 음수가 오면, 음수의 절대값만큼 10을 거듭제곡합 숫자로 주어진 숫자를 나눈다. ex 123e-6은 0.000123을 나타낸다.

 

다양한 진법 사용하기

16진수(0x), 8진수(0o), 2진수(0b)를 사용할 수 있게 지원한다. ex)0xff, 0o377, 0b11111111, -> 255

parseInt(str, base)를 사용하면 str을 base진수로 바꿔준다. (단, 2 <= base <= 36)

  반대로 base진수로 된 str을 파싱할 수 있다.

num.toString(base)는 숫자를 base진수로 바꾸고, 이를 문자열 형태로 반환한다. (단, 2 <= base <= 36)

숫자를 대상으로 매서드 toString을 직접 호출할 때는 숫자 다음에 점 두개(..)를 붙여야 한다.

ex) 255..toString(16) -> ff점을 한 개만 사용하면, 첫 번째 점 이후는 소수부로 인식되어 에러가 발생한다. ex) 255.toString(16) -> ERROR()를 이용한다면 점 하나로도 사용가능하다. ex) (255).toString(16) -> ff

 

단위가 붙은 숫자 변환하기

parseInt/parseFloat를 사용하면 문자열에서 앞에 숫자만 읽고, 읽은 숫자를 에러가 발생하기 전에 반환해주는 '약한'형 변환을 사용할 수 있다.

ex) parseInt('100px') -> 100

     parseFloat('12.3em') -> 12.5

     partseInt('12.3em') -> 12

 

소수 처리하기

Math.floor(num)

  소수점 첫째 자리에서 내림(버림). ex) Math.floor(3.2) -> 3, Math.floor(-1.2) -> -2

Math.ceil(num)

  소수점 첫째 자리에서 올림. ex) Math.ceil(3.2) -> 4, Math.ceil(-1.2) -> -1

Math.round(num)

  소수점 첫째 자리에서 반올림. ex) Math.round(3.2) -> 3, Math.round(3.7) -> 4, Math.round(-1.2) -> -1, Math.round(-1.7) -> -2

Math.trunc(num)

  소수부를 무시. ex) Math.trunc(3.2) -> 3, Math.trunc(-1.2) -> -1

num.toFixed(precision)

  precision 다음 자리수를 반올림하여 문자열을 반환한다.

소수를 다룰 땐 정밀도 손실에 주의해야 한다.

2진법 체계에서 작동하는 컴퓨터는 2의 거듭제곱으로 나눈 값은 잘 동작하지만 2의 거듭제곱이 아닌 값으로 나누게 되면 무한 소수가 되어버린다. 따라서 0.1 또는 0.2를 정확하게 저장하는 방법은 없다.

0.1.toFixed(20) -> 0.10000000000000000555

그리고 소수를 합하면 '정밀도 손실'도 더해진다. 이로 인해 0.1+0.2는 정확히 0.3이 아니게 된다.

 

특수 숫자값 검사하기

isNaN

  인수를 숫자로 변환한 다음 NaN인지 테스트하여 NaN일 경우 true를 반환한다.

  NaN은 NaN 자기 자신을 포함하여 그 어떤 값과도 같지 않기 때문에 NaN을 검증하는 데 사용한다.

isFinite

  인수를 숫자로 변환하고 변환한 숫자가 NaN/Infinity/-Infinity가 아닌 일반 숫자인 경우 true를 반환함.

  문자열이 일반 숫자인지 검증하는 데 사용된다.

  단, 빈 문자열은 0으로 취급된다는 점에 유의해야 한다.

 

다양한 수학함수가 필요할 때는 Math 객체를 이용하면 된다. (단, Number 자료형만 지원하며, BigInt와는 사용할 수 없다.)

728x90
반응형

'JavaScript' 카테고리의 다른 글

JavaScript ) 래퍼 객체  (0) 2022.03.01
JavaScript 객체의 형변환  (0) 2022.02.25
JavaScript 심볼형  (0) 2022.02.14
JavaScript this와 체이닝  (0) 2022.02.10
JavaScript 가비지 컬렉션  (0) 2022.02.10

댓글