surf core js : 유용한 메서드와 내장 함수 - number

Dino_·2021년 8월 13일
0

surf javascript

목록 보기
19/28
post-thumbnail

toString(base)

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)도 가능하다.

toFixed(n)

원하는 자리(n)에서 소수점 아래 숫자를 반올림할 수 있다.

let n = 1.23456;

alert( n.toFixed(2) ); // 1.23

내장 함수 parseInt와 parseFloat

단항 덧셈 연산자 + 또는 Number()를 사용하여 숫자형으로 변형할 때 적용되는 규칙은 꽤 엄격하다. 피연산자가 숫자가 아니면 형 변환이 실패한다.

alert( +"100px" ); // NaN

엄격한 규칙이 적용되지 않는 유일한 예외는 문자열의 처음 또는 끝에 공백이 있어서 공백을 무시할 때이다.

엄격하게 숫자를 찾지 않고 숫자만 추출하기 위해서 내장 함수 parseIntparseFloat이 만들어졌다.

  1. 두 함수는 불가능할 때까지 문자열에서 숫자를 ‘읽는다’.

  2. 숫자를 읽는 도중 오류가 발생하면 이미 수집된 숫자를 반환한다.

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(str, radix)의 두 번째 인수

parseInt()의 두 번째 매개 변수는 선택적으로 사용할 수 있다.

radix는 원하는 진수를 지정해 줄 때 사용한다. 따라서 parseInt를 사용하면 16진수 문자열, 2진수 문자열 등을 파싱할 수 있다.

alert( parseInt('0xff', 16) ); // 255
alert( parseInt('ff', 16) ); // 255, 0x가 없어도 동작합니다.

수학 함수 (Math)

자바스크립트에서 제공하는 내장 객체 Math엔 다양한 수학 관련 함수와 상수들이 들어있다.

Math.random()

0과 1 사이의 난수를 반환한다(1은 제외).

Math.max(a, b, c...) / Math.min(a, b, c...)

인수 중 최대/최솟값을 반환한다.

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) );

Math.pow(n, power)

n을 power번 거듭제곱한 값을 반환한다.

alert( Math.pow(2, 10) ); // 2의 10제곱 = 1024

// 아래와 같이 ** 을 사용할 수 도 있다.
alert( 2 ** 10 );

Math.floor(n)

소수점 첫째 자리에서 내림(버림)한 정수를 return 한다.

Math.ceil(n)

소수점 첫째 자리에서 올림한 정수를 return 한다.

Math.round(n)

소수점 첫째 자리에서 반올림한 정수를 return 한다.

Math.trunc(n)

소수부를 무시한 정수를 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 같은 분수는 이진법으로 표현하면 무한 소수가 된다.

그래서 근사값으로 치환이 되는데 이를 정밀도 손실이라고 한다.

Reference

profile
호기심 많은 청년

0개의 댓글