뚜sh뚜sh

[모던 JavaScript] 5.2 숫자형 본문

Language/JavaScript

[모던 JavaScript] 5.2 숫자형

뚜sh뚜sh 2023. 2. 2. 17:29

모던 자바스크립트는 숫자를 나타내는 두 가지 자료형을 지원함

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

2. 임의의 길이를 가진 정수는 BigInt 숫자로 나타낼 수 있음 (일반적인 숫자는 2^53 이상이거나 -2^53 이하일 수 없다는 제약 때문에 BigInt 라는 새로운 자료형이 만들어짐)

 

 

 

숫자를 입력하는 다양한 방법

- 자바스크립트에서도 숫자 옆에 'e'를 붙이고 0의 개수를 그 옆에 붙여주면 숫자를 줄일 수 있음

- 즉, 'e'는 e 왼쪽의 수에 e 오른쪽에 있는 수만큼의 10의 거듭제곱을 곱하는 효과가 있음

let billion = 1e9;  // 10억, 1과 9개의 0

alert( 7.3e9 );  // 73억 (7,300,000,000)

 

- 작은 숫자를 표현할 때도 큰 숫자를 표현할 때처럼 'e'를 사용할 수 있음

let ms = 1e-6; // 1에서 왼쪽으로 6번 소수점 이동

 

 

 

16진수, 2진수, 8진수

- 16진수는 0x를 사용해 표현할 수 있음

alert( 0xff ); // 255
alert( 0xFF ); // 255 (대·소문자를 가리지 않으므로 둘 다 같은 값을 나타냅니다.)

 

- 2진수와 8진수는 아주 드물게 쓰이긴 하지만, 접두사 0b와 0o를 사용해 간단히 나타낼 수 있음

let a = 0b11111111; // 255의 2진수
let b = 0o377; // 255의 8진수

alert( a == b ); // true, 진법은 다르지만, a와 b는 같은 수임

 

 

 

toString(base)

- num.toString(base) 메서드는 base 진법으로 num을 표현한 후, 이를 문자형으로 변환해 반환함

- base는 2에서 36까지 쓸 수 있는데, 기본값은 10임

let num = 255;

alert( num.toString(16) );  // ff
alert( num.toString(2) );   // 11111111

 

 

 

점 두 개와 메서드 호출

- 123456..toString(36) 에 있는 점 두 개는 오타가 아님, 숫자를 대상으로 메서드 toString을 직접 호출하고 싶다면 숫자 다음에 점 두 개를 붙여야함

- 123456.toString(36) 처럼 점을 한 개만 사용하면, 첫 번째 점 이후는 소수부로 인식되어 에러가 발생할 수 있음

 

 

 

어림수 구하기

- Math.floor : 소수점 첫째 자리에서 내림(버림)

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

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

- Math.trunc : 소수부를 무시

 

 

 

부정확한 계산

- 숫자는 내부적으로 64비트 형식으로 표현되기 때문에 숫자를 저장하려면 정확히 64비트가 필요함

- 64비트 중 52비트는 숫자를 저장하는 데 사용되고, 11비트는 소수점 위치를(정수는 0), 1비트는 부호를 저장하는 데 사용됨

- 숫자가 너무 커지면 64비트 공간이 넘쳐서 Infinity 로 처리됨

 

 

 

isNaN과 isFinite

- Infinity, -Infinity : 그 어떤 숫자보다 큰 혹인 작은 특수 숫자 값

- NaN : 에러를 나타내는 값

- isNaN(value) : 인수를 숫자로 변환한 다음 NaN인지 테스트함, NaN은 자기 자신을 포함하여 그 어떤 값과도 같지 않음

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

 

 

 

Object.is와 비교하기

- Object.is는 === 처럼 값을 비교할 때 사용되는 특별한 내장 메서드임

- 비교 결과가 정확해야 하는 경우 Object.is를 사용함

 

 

 

parseInt와 parseFloat

- 두 함수는 불가능할 때까지 문자열에서 숫자를 '읽음'

- 숫자를 읽는 도중 오류가 발생하면 이미 수집된 숫자를 반환함

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

 

 

 

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

- radix는 원하는 진수를 지정해 줄 때 사용함

 

 

 

기타 수학 함수

- Math.random() : 0과 1 사이의 난수를 반환함 (1은 제외)

- Math.max(a, b, c, ...) / Math.min(a, b, c, ...) : 인수 중 최대/최솟값을 반환함

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

 

Comments