본문 바로가기
Programming/자바스크립트

[자바스크립트] Math

by 코딩하는 랄로 2023. 10. 28.
728x90

Math 객체

Math 객체는 자바스크리트가 수학 상수와 함수를 위한 프로퍼티와 메소드를 제공하는 빌트인 객체이다. Math 객체는 생성자 함수가 아니기 때문에 정적(static) 프로퍼티와 메소드만을 제공한다.

 

 

 

Math 메소드

Math 객체가 가지고 있는 메소드 중 자주 사용하는 메소드들에 대해 알아보자. Math 메소드는 사용하기 매우 쉽기 때문에 간단한 설명과 예제를 통해 알아보겠다. 예제를 통해 각 메소드들이 상황에 따라 어떤 값을 반환하는지를 위주로 살펴보겠다.

 

Math.abs(number) 

인수의 절댓값을 반환한다.

// Math.abs(number)
Math.abs(-1);       // 1
Math.abs('-1');     // 1
Math.abs('');       // 0
Math.abs([]);       // 0
Math.abs(null);     // 0
Math.abs(undefined);// NaN

 

Math.round(number)

인수의 소수점 이하를 반올림한 정수를 반환한다.

// Math.round(number)
Math.round(1.4);  // 1
Math.round(1.6);  // 2
Math.round(-1.4); // -1
Math.round(-1.6); // -2
Math.round(1);    // 1
Math.round();     // NaN

 

Math.ceil(number)

인수의 소수점 이하를 올림한 정수를 반환한다.

// Math.ceil(number)
Math.ceil(1.4);  // 2
Math.ceil(1.6);  // 2
Math.ceil(-1.4); // -1
Math.ceil(-1.6); // -1
Math.ceil(1);    // 1
Math.ceil();     // NaN

 

Math.floor(number)

인수의 소수점 이하를 내림한 정수를 반환한다. 양수인 경우, 정수 부분만 반환하고 음수인 경우 정수 부분에 -1을 더한 정수를 반환한다.

// Math.floor(number)
Math.floor(1.9);  // 1
Math.floor(9.1);  // 9
Math.floor(-1.9); // -1 + -1 = -2
Math.floor(-9.1); // -9 + -1 = -10
Math.floor(1);    // 1
Math.floor();     // NaN

 

Math.sqrt(number)

인수의 제곱근을 반환한다.

// Math.sqrt(number)
Math.sqrt(9);  // 3
Math.sqrt(-9); // NaN <= 
Math.sqrt(2);  // 1.414213562373095
Math.sqrt(1);  // 1
Math.sqrt(0);  // 0
Math.sqrt();   // NaN

 

Math.pow(number, number)

첫 번째 인수는 밑, 두 번째 인수는 지수로서 거듭 제곱을 계산하여 반환한다. ES7 부터는 거듭제곱 연산자를 도입되어 이러한 메소드도 있다고 알아두면 될꺼 같다.

// Math.pow(number, number)
Math.pow(2, 8);  // 256
Math.pow(2, -1); // 0.5

// ES7(ECMAScript 2016) Exponentiation operator(거듭 제곱 연산자)
2 ** 8; // 256

 

 

Math.max(...number)

넘겨 받은 인수 중에서 가장 큰 수를 반환한다. 배열을 전개연산자를 통해 넘겨주에 최댓값을 구하는 식의 활용도 가능하다.

// Math.max(...number)
Math.max(1, 2, 3); // 3

// 배열 요소 중에서 최대값 취득
// max()  인수로 배열을 받을 수 없으니, 배열을 인수로 받는 apply를 사용
const arr = [1, 2, 3];
const max = Math.max.apply(null, arr); // 3

// ES6 문법
Math.max(...arr); // 3
[...rest] = [1,2,4]; // rest = [1,2,4]
Math.max(...rest); //4

 

Math.min(...number)

넘겨받은 인수 중에서 가장 작은 수를 반환한다.

// Math.min(...number)
Math.min(1, 2, 3); // 1

// 배열 요소 중에서 최소값 취득
const arr = [1, 2, 3];
const min = Math.min.apply(null, arr); // 1

// ES6 문법
Math.min(...arr); // 1

 

Math.random()

임의의 부동 소수점을 반환한다. 반환된 부동 소수점은 0 이상 1미만의 수이다.

// Math.random()
Math.random(); // 0 ~ 1 미만의 부동 소수점 (0.8208720231391746)

/*
1 ~ 10의 랜덤 정수
- Math.random로 0 ~ 1 미만의 부동 소수점을 구함
- 10을 곱해 0 ~ 10 미만의 부동 소수점을 구함
- 0 ~ 10 미만의 부동 소수점에 1을 더해 1 ~ 11 미만의 부동 소수점을 구함
- Math.floor으로 1 ~ 11 미만까지의 부동 소수점의 소수점 이하를 떼어 버림
=> 1에서 10까지의 랜덤 정수
*/
const random = Math.floor((Math.random() * 10) + 1);
console.log(random); // 1 ~ 10까지의 정수

 

그 외 메소드

위의 자주 사용되는 메소드 이외에도 다음과 같은 메소드가 있다.

 

메소드 설명
Math.cbrt(x) x의 세제곱근을 반환함.
Math.clz32(x) x을 32비트 이진수로 변환한 후, 0이 아닌 비트의 개수를 반환함.
Math.exp(x) ex 의 값을 반환함. (e : 오일러의 수)
Math.expm1(x) 1 - ex 의 값을 반환함.
Math.fround(x) x와 가장 근접한 32비트 부동 소수점 수(single precision float)를 반환함.
Math.hypot(x, y, ...) 인수로 전달받은 값들을 각각 제곱한 후 더한 총합의 제곱근을 반환함.
Math.imul(x, y) 인수로 전달받은 두 값의 32비트 곱셈의 결과를 반환함.
Math.log(x) x의 자연로그 값을 반환함. (ln x)
Math.log1p(x) ln(1 + x)의 값을 반환함.
Math.log10(x) x의 10을 밑으로 가지는 로그 값을 반환함.
Math.log2(x) x의 2를 밑으로 가지는 로그 값을 반환함.
Math.sign(x) x의 부호 값을 반환함.
Math.trunc(x) x의 모든 소수 부분을 삭제하고 정수 부분만을 반환함.
Math.sin(x), Math.cos(x), Math.tan(x),Math.asin(x), Math.acos(x), Math.atan(x), Math.asinh(x), Math.acosh(x), Math.atanh(x), Math.atan2(x) x의 해당 삼각 함숫값을 반환함.

 

 

 

Math의 프로퍼티

메소드 이외에도 메소드 객체는 수학에서 사용하는 원주율(PI)같은 다양한 상수들을 제공하고 있다.

프로퍼티 설명 대략값
Math.E 오일러의 수(Euler's constant)라고 불리며, 자연로그(natural logarithms)의 밑(base) 값 2.718
Math.LN2 2의 자연로그 값 0.693
Math.LN10 10의 자연로그 값 2.303
Math.LOG2E 오일러 수(e)의 밑 값이 2인 로그 값 1.443
Math.LOG10E 오일러 수(e)의 밑 값이 10인 로그 값 0.434
Math.PI 원의 원주를 지름으로 나눈 비율(원주율) 값 3.14159
Math.SQRT1_2 2의 제곱근의 역수 값 0.707
Math.SQRT2 2의 제곱근 값 1.414
728x90