숫자형
숫자형
모던 JS 는 숫자를 나타내는 두 가지 자료형 지원
-
일반적인 숫자는 “배정밀도 부동서수점 숫자” 로 알려진 64비트 형식의 IEEE-754 에 저장
-
임의의 길이를 가진 정수는 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번째 수 기준으로 어림수 구할 시 방법
-
곱하기와 나누기 숫자에 거듭제곱 수 곱한 후 원하는 어림수 내장 함수 호출해 처음 곱한 수 다시 나누기
-
소수점 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
===처럼 값을 비교하는 메서드
두가지 케이스에선 ===보다 신뢰할 만 함
비교결과가 정확해야 하는 경우 사용.
-
NaN을 대상으로 비교
-
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 객체에서 다양한 숫자 관련 함수, 상수 사용 가능.