/* JavaScript DAY08 2022.11.12 */
/* Number, Math --------------------------------------------------------------------- */
/* 주의!!! : 결과를 나타낼 떄, ''는 문자열로 반환함을 의미한다. */
/* Number('문자열로 나온 값')를 이용하여, 숫자로 변환 작업을 꼭 해주자 */
// toString()
// 10진수 -> 2진수/ 16진수
let num = 255;
num.toString(); // '10'
num.toString(2); // '11111111'
num.toString(16); // 'ff'
// 수학과 관련된 프로퍼티와 메소드들을 가지고 있는 객체 Math
Math.PI; // 3.141592653589793
let num2 = 5.2;
let num3 = 5.8;
// Math.ceil(): 숫자와 상관없이 올림
Math.ceil(num2); // 6
Math.ceil(num3); // 6
// Math.floor(): 숫자와 상관없이 내림
Math.floor(num2); // 5
Math.floor(num3); // 5
// Math.round(): 반올림
Math.round(num2); // 5
Math.round(num3); // 6
// 하지만 예를들어, 요구사항이 소수점 셋째 자리에서 반올림하여, 둘째 자리까지 표현해달라고 온다면?
let num4 = 30.1234;
num4 = num4 * 100; // 3012.34
num4 = Math.round(num4); // 3012
num4 = num4 / 100; // 30.12
// 혹은 toFixed()라는 메소드를 사용 할 수도 있다. 숫자를 인자로 받아 그 숫자만큼 소숫점 이하의 자리에 관여한다.
num4.toFixed(2); // '30.12'
// 하지만 인자로 받는 숫자가 0이거나 소숫점 자리보다 크다면 어떻게 될까?
num4.toFixed(0); // '30' <- 정수만 나온다.
num4.toFixed(6); // '30.120000' <- 넘어가는 자리 만큼 0이 붙는다. (통계를 나타낼 때 많이쓰임)
// isNaN(): NaN인지 아닌지를 판별하는 함수 (NaN을 판별하는 유일한 검사법)
let x = Number('x');
isNaN(x); // true
// 하지만 NaN은 신기하게도 자기 자신과도 똑같지 않다고 판단을 한다.
x == NaN; // false
x === NaN; // false
NaN == NaN; // false
// parseInt(): 문자열 숫자로 바꿔준다. Number와의 차이점은 문자가 혼용되어 있어도 동작을 한다는 점이다.
let margin = '10px';
// Number는 에러(NaN)가 나지만,
Number(margin); // NaN
// parseInt는 읽을 수 있는 부분까지는 읽고, 문자를 만나면 숫자로 반환한다.
parseInt(margin); // 10
// 따라서 parseInt를 사용할 때는, 숫자로 시작하지 않으면 에러(NaN)를 반환한다.
let example = 'a10';
parseInt(example); // NaN
// parseInt는 두번 째 인수를 받아서 n진수를 지정할 수 있다.
let example2 = 'f3';
parseInt(example2, 16); // 243 <- 두 번째 인수로 16을 전달해서 16진수로 바꾸었다.
parseInt('11', 2); // 3 <- 이렇게 문자열 11을 숫자로 바꾸고 2진수에서 10진수로 손쉽게 바꿀 수 있다.
// parseFloat(): parseInt와 동일하게 동작하지만, 부동 소숫점을 반환한다.
let padding = '18.5%';
parseInt(padding); // 18 <- parseInt는 소숫점 이하는 무시하고 정수만 반환한다.
parseFloat(padding); // 18.5
// Math.random(): 0 ~ 1 사이의 무작위 숫자를 생성한다.
Math.random(); // 0.9869045353998014
// 1 ~ 100 사이의 임의의 숫자를 뽑고 싶다면?
Math.floor(Math.random() * 100) + 1; // floor를 사용해서 소숫점을 없애기 때문에, 0과 99가 나오므로, +1을 해줘야 한다.
// Math.max() / Math.min(): 괄호안의 인수들 중 최댓값 / 최솟값을 반환한다.
Math.max(1, 4, -1, 5, 10, 9, 5.54); // 10
Math.min(1, 4, -1, 5, 10, 9, 5.54); // -1
// Math.abs(): 절대값을 보여준다. (abs는 absolute의 약자이다.)
Math.abs(-1); // 1
// Math.pow(n, m): 제곱을 구한다.
Math.pow(2, 10); // 1023 <= 2의 10제곱
// Math.sqrt(): 제곱근을 구한다.
Math.sqrt(4); // 2
Math.sqrt(16); // 4
알찬 정보들이 많네요!!