num.toString(base) 메서드는 base진법으로 num을 표현한 후, 이를 문자형으로 변환해 반환한다.
let num = 255;
alert( num.toString(16) ); // ff
alert( num.toString(2) ); // 11111111
//base는 2에서 36까지 쓸 수 있는데, 기본값은 10
직접적으로 숫자를 대상으로 메서드 toString을 직접 호출하고 싶다면 숫자 다음에 점 두 개 ..를 붙여야 한다.
123456.toString(36)처럼 점을 한 개만 사용하면, 첫 번째 점 이후는 소수부로 인식되어 에러가 발생할 수 있다.
점을 하나 더 추가하면 자바스크립트는 소수부가 없다고 판단하고 함수를 호출한다.
(123456).toString(36)도 가능하다.
원하는 자리(n)에서 소수점 아래 숫자를 반올림할 수 있다.
let n = 1.23456;
alert( n.toFixed(2) ); // 1.23
단항 덧셈 연산자 + 또는 Number()를 사용하여 숫자형으로 변형할 때 적용되는 규칙은 꽤 엄격하다. 피연산자가 숫자가 아니면 형 변환이 실패한다.
alert( +"100px" ); // NaN
엄격한 규칙이 적용되지 않는 유일한 예외는 문자열의 처음 또는 끝에 공백이 있어서 공백을 무시할 때이다.
엄격하게 숫자를 찾지 않고 숫자만 추출하기 위해서 내장 함수 parseInt
와 parseFloat
이 만들어졌다.
두 함수는 불가능할 때까지 문자열에서 숫자를 ‘읽는다’.
숫자를 읽는 도중 오류가 발생하면 이미 수집된 숫자를 반환한다.
alert( parseInt('100px') ); // 100
alert( parseFloat('12.5em') ); // 12.5
alert( parseInt('12.3') ); // 12, 정수 부분만 반환된다.
alert( parseFloat('12.3.4') ); // 12.3, 두 번째 점에서 숫자 읽기를 멈춘다.
parseInt와 parseFloat가 NaN을 반환할 때도 있다. (읽을 수 있는 숫자가 없을 때)
parseInt()의 두 번째 매개 변수는 선택적으로 사용할 수 있다.
radix는 원하는 진수를 지정해 줄 때 사용한다. 따라서 parseInt를 사용하면 16진수 문자열, 2진수 문자열 등을 파싱할 수 있다.
alert( parseInt('0xff', 16) ); // 255
alert( parseInt('ff', 16) ); // 255, 0x가 없어도 동작합니다.
자바스크립트에서 제공하는 내장 객체 Math엔 다양한 수학 관련 함수와 상수들이 들어있다.
0과 1 사이의 난수를 반환한다(1은 제외).
인수 중 최대/최솟값을 반환한다.
alert( Math.max(3, 5, -10, 0, 1) ); // 5
alert( Math.min(1, 2) ); // 1
//아래와 같이 spread operator를 사용할 수 도 있다.
const arr = [3, 5, -10, 0, 1];
alert( Math.max(...arr) );
n을 power번 거듭제곱한 값을 반환한다.
alert( Math.pow(2, 10) ); // 2의 10제곱 = 1024
// 아래와 같이 ** 을 사용할 수 도 있다.
alert( 2 ** 10 );
소수점 첫째 자리에서 내림(버림)한 정수를 return 한다.
소수점 첫째 자리에서 올림한 정수를 return 한다.
소수점 첫째 자리에서 반올림한 정수를 return 한다.
소수부를 무시한 정수를 return 한다.
ex) 3.1은 3이 되고 -1.1은 -1이 된다.
숫자는 내부적으로 64비트 형식 IEEE-754으로 표현되기 때문에 숫자를 저장하려면 정확히 64비트가 필요하다.
64비트 중 52비트는 숫자를 저장하는 데 사용되고, 11비트는 소수점 위치를(정수는 0), 1비트는 부호를 저장하는 데 사용된다.
그런데 숫자가 너무 커지면 64비트 공간이 넘쳐서 Infinity로 처리된다.
alert( 1e500 ); // Infinity
꽤 자주 발생하는 현상인 정밀도 손실(loss of precision)도 있다.
alert( 0.1 + 0.2 == 0.3 ); // false
숫자는 0과 1로 이루어진 이진수로 변환되어 연속된 메모리 공간에 저장되는데, 10진법을 사용하면 쉽게 표현할 수 있는 0.1, 0.2 같은 분수는 이진법으로 표현하면 무한 소수가 된다.
그래서 근사값으로 치환이 되는데 이를 정밀도 손실이라고 한다.