2 minute read

숫자형

모던 JS 는 숫자를 나타내는 두 가지 자료형 지원

  1. 일반적인 숫자는 “배정밀도 부동서수점 숫자” 로 알려진 64비트 형식의 IEEE-754 에 저장

  2. 임의의 길이를 가진 정수는 BigInt 숫자

  • 숫자를 입력하는 방법

    0을 많이 사용해 숫자 표현 시 숫자 옆에 ‘e’ 를 붙이고 10의 거듭제곱 수 붙여줌.(음수도 가능)

  • 16진수, 2진수, 8진수

    16진수는 0x, 2진수는 0b, 8진수는 0e

    그 외으 ㅣ진법 시 parseInt

  • toString(base)

    base 진법으로 num 표현 수 이를 문자형으로 변환해 반환

    base는 2에서 36. 기본값은 10

  • 점 두개의 메서드 호출

    숫자 대상으로 메서드 직접 호출하고 싶을 때 점 두개 붙임

  • 어림수 구하기

    Math.floor : 소수점 첫째자리에서 내림

    Math.ceil : 소수점 첫째자리에서 올림

    Math.rount : 소수점 첫째자리에서 반올림

    Math.thunc : 소수부 무시

    n번째 수 기준으로 어림수 구할 시 방법

    1. 곱하기와 나누기 숫자에 거듭제곱 수 곱한 후 원하는 어림수 내장 함수 호출해 처음 곱한 수 다시 나누기

    2. 소수점 n번째 수 까지 어림수 구한 후 이름 문자형으로 반환해주는 toFixed(n) 사용

    toFixed 는 Math.round 와 유사하게 가장 가까운 값 올림 혹은 버림 반환값이 문자열임 소수부의 길이가 인수보다 작을 시 끝에 0 추가

  • 부정확한 계산

    JS 는 숫자 저장시 정확히 64비트 필요

    52비트는 숫자 저장

    11비트는 소수점 위치 저장

    1비트는 부호 저장

    숫자 너무 클 시 Infinity로 처리

    • 정밀도 손실

    숫자는 이진수로 변환하여 연속된 메모리 공간에 저장

    분수 같은 수는 이진법으로 표현 시 무한소수

    JS 뿐만이 아닌 현상

    메서드로 어림수 만드는 방법으로 해결

  • 흥미로운 발견

    JS는 숫자 손실이 일어나도 오류 발생 안 시킴

    적절한 포맷으로 숫자 맞추는데 최선 다 함

  • 두 종류의 0

    0, -0 의 두 종류의 0 존재

    모든 숫자에 부호 설정 가능

    연산에서 동일하게 취급

  • inNanN 과 isFinite

    Infinity, -Infinity, NaN 은 숫자형 이지만 정상적인 숫자 아님

    isNaN(value) : 인수를 숫자로 변환 후 NaN 인지 테스트(일치 연산자로 비교 불가하기에 만든 메서드)

    isFinite(value) : 인수 숫자 변환 후 변환한 숫자가 Infinity/-Infinity/NaN 아닌 일반적인 숫자일 시 true 반환(문자열이 일반 숫자인지 검증할 때 사용)

  • Object.is

    ===처럼 값을 비교하는 메서드

    두가지 케이스에선 ===보다 신뢰할 만 함

    비교결과가 정확해야 하는 경우 사용.

    1. NaN을 대상으로 비교

    2. 0과 -0이 다르게 취급되어야 할 때

  • parseInt 와 parseFloat

    두 함수는 불가능할 떄 까지 문자열에서 숫자 ‘읽음’

    숫자 읽는 도중 오류 발생 시 이미 수집된 숫자 반환

    parseInt 는 정수, parseFloat 는 부동 소수점 숫자 반환

    읽을 수 있는 숫자 없을 시 NaN 반환

  • parseInt(str,radix) 의 두번째 인수

    두번째 인수 선택적으로 사용.

    원하는 진수 지정해줄 시 사용

  • 기타 수학 함수

    JS에서 제공하는 내장 객체 Math

    다양한 함수와 상수 지님

    Math.random() : 0과 1 사이 난수 반환

    Math.max/min : 인수 중 최대/최소 반환

    Math.pow(n,power) : n을 power번 거듭제곱한 값 반환

요약

  • JS 는 숫자를 나타내는 64비트 형식의 숫자와 BigInt 숫자 제공

  • 64비트에서 52비트는 숫자, 11비트는 소수점 위치, 1비트는 부호 로 저장됨

  • ‘e’를 이용해 0 많이 붙이기 가능

  • 16진수, 2진수, 8진수 기본 지원

  • toString(base) 로 원하는 진법으로 문자열 반환

  • 점 두개로 숫자 대상 메서드 직접 호출

  • Math 함수로 다양한 수학 연산 가능

  • 숫자 너무 클 시 64비트 영역 넘어서 Infinity로 처리

  • 정밀도 손실은 2진수 기반의 메모리 저장에 의해 발생하며 10진수로 변경 시 생기는 무한 소수로 변환됨

  • 숫자 손실 나도 오류 발생 없음

  • 0, -0 의 존재는 모든 숫자에 부호 설정 가능해서 생김

  • isNaN, isFinite 로 정상적인 숫자 구분 가능

  • Object.is 로 === 보다 정확하게 값 구분 가능

  • parseInt 와 parseFloat 로 string 에서 숫자 읽을 수 있음

  • paerseInt 는 정수, parseFloat 는 부동 솟수점 숫자 반환

  • paseInt는 원하는 진수 지정 가능

  • Math 객체에서 다양한 숫자 관련 함수, 상수 사용 가능.

Categories: ,

Updated: