TIL 10/7

Rami·2024년 10월 7일

TodayILearn

목록 보기
16/61

Math 객체의 메서드

1. Math.round()

  • 설명: 숫자를 반올림하여 가장 가까운 정수로 반환합니다.
  • 사용 예시: 가격을 반올림하거나, 소수점을 정리할 때 사용.
  • 예시:
    Math.round(1.5); // 2
    Math.round(1.4); // 1

2. Math.floor()

  • 설명: 숫자를 내림하여 가장 가까운 작은 정수로 반환합니다.
  • 사용 예시: 페이지네이션, 몫을 계산할 때, 인덱스를 계산할 때 자주 사용.
  • 예시:
    Math.floor(1.9); // 1
    Math.floor(3.14); // 3

3. Math.ceil()

  • 설명: 숫자를 올림하여 가장 가까운 큰 정수로 반환합니다.
  • 사용 예시: 최소 단위 확보, 상품 수량 계산, 페이지 수 계산 시 자주 사용.
  • 예시:
    Math.ceil(1.1); // 2
    Math.ceil(0.01); // 1

4. Math.random()

  • 설명: 0 이상 1 미만의 랜덤한 실수를 반환합니다.

  • 사용 예시: 랜덤 값 생성, 배열의 요소를 무작위로 선택할 때 자주 사용.

  • 예시:

    Math.random(); // 0.123456... (예시 값)
  • 응용 예시: 1~10 사이의 랜덤 정수 생성

    const randomNum = Math.floor(Math.random() * 10) + 1; // 1부터 10 사이의 정수

5. Math.max()

  • 설명: 주어진 숫자들 중 가장 큰 값을 반환합니다.
  • 사용 예시: 여러 값 중 최대값을 찾을 때, 성능 지표 비교 시 자주 사용.
  • 예시:
    Math.max(1, 5, 3, 7, 2); // 7
    Math.max(-1, -5, -3, -7, -2); // -1

6. Math.min()

  • 설명: 주어진 숫자들 중 가장 작은 값을 반환합니다.
  • 사용 예시: 여러 값 중 최소값을 찾을 때, 레이아웃의 최소 높이나 폭 계산 시 자주 사용.
  • 예시:
    Math.min(1, 5, 3, 7, 2); // 1
    Math.min(-1, -5, -3, -7, -2); // -7

7. Math.abs()

  • 설명: 입력된 숫자의 절대값을 반환합니다.
  • 사용 예시: 거리, 차이 계산, 음수를 양수로 변경할 때 자주 사용.
  • 예시:
    Math.abs(-10); // 10
    Math.abs(5); // 5

8. Math.trunc()

  • 설명: 숫자의 소수점을 제거하고 정수 부분만 반환합니다.
  • 사용 예시: 정수만 필요할 때, 소수점 제거가 필요할 때 자주 사용.
  • 예시:
    Math.trunc(1.9); // 1
    Math.trunc(-1.9); // -1

9. Math.pow()

  • 설명: 주어진 숫자의 거듭제곱 값을 반환합니다.
  • 사용 예시: 특정 수의 제곱, 지수 계산, 복잡한 수학 계산에 사용.
  • 예시:
    Math.pow(2, 3); // 8 (2의 3제곱)
    Math.pow(5, 2); // 25 (5의 2제곱)

10. Math.sqrt()

  • 설명: 숫자의 제곱근을 반환합니다.
  • 사용 예시: 거리 계산, 제곱근 값 계산 시 자주 사용.
  • 예시:
    Math.sqrt(4); // 2
    Math.sqrt(16); // 4

11. Math.cbrt()

  • 설명: 숫자의 세제곱근을 반환합니다.
  • 사용 예시: 복잡한 수학 계산에 사용.
  • 예시:
    Math.cbrt(8); // 2
    Math.cbrt(27); // 3

12. Math.sign()

  • 설명: 숫자의 부호를 반환합니다.
  • 사용 예시: 양수와 음수 판별, 부호 판단 시 자주 사용.
  • 예시:
    Math.sign(10); // 1
    Math.sign(-10); // -1
    Math.sign(0); // 0

13. Math.log()

  • 설명: 주어진 숫자의 자연 로그 값을 반환합니다.
  • 사용 예시: 복잡한 수학 계산 시 자주 사용.
  • 예시:
    Math.log(1); // 0
    Math.log(Math.E); // 1
    Math.log(10); // 2.302...

14. Math.log10()

  • 설명: 주어진 숫자의 상용 로그 값을 반환합니다.
  • 사용 예시: 상용 로그 계산 시 자주 사용.
  • 예시:
    Math.log10(10); // 1
    Math.log10(100); // 2
    Math.log10(1000); // 3

15. Math.exp()

  • 설명: 주어진 숫자를 지수로 사용하여 e의 거듭제곱 값을 반환합니다.
  • 사용 예시: 지수 계산, 복잡한 수학 계산 시 사용.
  • 예시:
    Math.exp(1); // 2.718...
    Math.exp(2); // 7.389...

자주 사용되는 메서드 순서 요약

  1. Math.round() - 반올림
  2. Math.floor() - 내림
  3. Math.ceil() - 올림
  4. Math.random() - 랜덤 값 생성
  5. Math.max() - 최대값
  6. Math.min() - 최소값
  7. Math.abs() - 절대값
  8. Math.trunc() - 소수점 제거
  9. Math.pow() - 거듭제곱
  10. Math.sqrt() - 제곱근
  11. Math.cbrt() - 세제곱근
  12. Math.sign() - 부호 반환
  13. Math.log() - 자연 로그
  14. Math.log10() - 상용 로그
  15. Math.exp() - 지수 함수

parseInt vs floor

parseInt()Math.floor()의 차이점을 이해하려면 두 메서드가 숫자를 처리하는 방식의 차이를 정확히 알아야 합니다. 아래에서 각각의 메서드에 대해 자세히 설명하고, 예시를 통해 어떻게 다르게 동작하는지 보여드리겠습니다.

1. parseInt() 메서드

  • parseInt()는 문자열을 정수로 변환하는 데 주로 사용됩니다.
  • 숫자가 인수로 전달되면, 해당 숫자를 문자열로 변환한 후 정수 부분만 추출합니다.
  • 소수점 이하의 값은 무시되므로 결과적으로 소수점을 자르고, 남은 정수 부분만 반환합니다.

예시:

console.log(parseInt("10.56")); // 10 - 문자열 "10.56"을 정수로 변환하여 10 반환
console.log(parseInt(4.99));    // 4 - 4.99의 정수 부분만 반환
console.log(parseInt(4.01));    // 4 - 4.01의 정수 부분만 반환

위 예시에서 보듯이 parseInt()는 소수점을 잘라내고, 정수 부분만 가져옵니다. 이 때문에 "내림"이 아니라 단순히 소수점 이하를 잘라내는 기능입니다.

2. Math.floor() 메서드

  • Math.floor()는 전달된 숫자에 대해 항상 내림 처리를 합니다.
  • Math.floor()는 인수로 전달된 숫자의 소수점 이하를 모두 버리고, 해당 숫자보다 작거나 같은 가장 큰 정수를 반환합니다.

예시:

console.log(Math.floor(4.99)); // 4 - 내림하여 4 반환
console.log(Math.floor(4.01)); // 4 - 내림하여 4 반환
console.log(Math.floor(-4.99));// -5 - 내림하여 -5 반환 (음수일 경우 절대값이 커짐)

Math.floor()는 항상 내림 처리를 하기 때문에 음수에서도 정수 부분을 내림하여 더 작은 값이 나옵니다. 이 부분이 parseInt()와의 중요한 차이점 중 하나입니다.

3. parseInt()Math.floor()의 차이점

  1. parseInt()는 단순히 정수 부분만 추출하기 때문에 음수의 경우 정수 부분만 가져오므로 절대값이 작아집니다.
  2. Math.floor()소수점 이하를 내림하여 음수의 경우 절대값이 커집니다.

예시로 차이점 확인:

// 양수 예시
console.log(parseInt(3.7));      // 3 - 정수 부분만 가져옴
console.log(Math.floor(3.7));    // 3 - 내림 처리로 3 반환

// 양수 예시 2
console.log(parseInt(8.99));     // 8 - 정수 부분만 가져옴
console.log(Math.floor(8.99));   // 8 - 내림 처리로 8 반환

// 음수 예시
console.log(parseInt(-3.7));     // -3 - 정수 부분만 가져오므로 절대값이 작아짐
console.log(Math.floor(-3.7));   // -4 - 내림 처리로 -4 반환 (절대값이 커짐)

// 음수 예시 2
console.log(parseInt(-8.99));    // -8 - 정수 부분만 가져옴
console.log(Math.floor(-8.99));  // -9 - 내림 처리로 -9 반환 (절대값이 커짐)

4. Math.floor(Math.random() * 10)parseInt(Math.random() * 10)의 차이점

Math.random()은 0(포함)에서 1(제외) 사이의 숫자를 반환합니다. 이를 10으로 곱하면 0.0에서 9.999...까지의 숫자가 생성됩니다. 이 숫자를 각각 Math.floor()parseInt()로 처리하면 다음과 같은 차이점이 있습니다:

차이점 설명:

  • Math.floor(Math.random() * 10)는 0부터 9까지의 정수를 정확하게 반환합니다. 내림 처리를 하기 때문에 소수점을 버리고, 항상 0에서 9까지의 정수가 나옵니다.
  • parseInt(Math.random() * 10)는 대부분의 경우 0부터 9까지의 정수를 반환하지만, 일부 예외적으로 예상하지 못한 값을 반환할 수도 있습니다.

예시:

for (let i = 0; i < 20; i++) {
  const randomValue = Math.random() * 10;
  console.log(`Math.floor: ${Math.floor(randomValue)}, parseInt: ${parseInt(randomValue)}`);
}

위 코드를 실행해보면 거의 대부분 같은 결과를 보여주지만, parseInt()는 간혹 소수점 이하가 너무 작은 경우 처리에서 예기치 않은 결과를 반환할 수 있습니다. 예를 들어 parseInt()9.999...와 같은 값을 10으로 잘라내는 경우도 있을 수 있습니다.

결론

  • 양수일 경우: parseInt()Math.floor()의 결과는 동일합니다.
  • 음수일 경우: parseInt()는 절대값이 작아지는 반면, Math.floor()는 절대값이 커집니다.
  • 사용 권장: 정수 부분을 추출하는 게 아니라, 일관된 "내림" 결과를 원한다면 Math.floor()를 사용하는 것이 더 안전합니다. parseInt()는 문자열을 정수로 변환할 때 사용하는 것이 좋습니다.

추가 예시 코드

const values = [3.5, 4.7, -3.5, -4.7, 0.999, -0.999, Math.random() * 10];
values.forEach(value => {
  console.log(`Value: ${value}, parseInt: ${parseInt(value)}, Math.floor: ${Math.floor(value)}`);
});

위 코드에서 다양한 값에 대해 parseInt()Math.floor()의 결과를 비교하여 차이점을 더욱 명확히 볼 수 있습니다.

Math.floor()는 내림을 필요로 할 때,
parseInt()는 문자열을 정수로 변환할 때 사용하는 것을 권장.


문제에 적용

Math.floor(Math.random() * 10)parseInt(Math.random() * 10)은 비슷해 보일 수 있지만, 실제로는 다르게 동작합니다. 각 메서드의 동작 방식을 살펴보겠습니다.

1. Math.floor(Math.random() * 10)

  • Math.random()은 0(포함) 이상, 1(제외) 미만의 난수를 생성합니다. 예를 들어, Math.random()의 결과가 0.456이라면, 이를 10으로 곱하면 4.56이 됩니다.
  • Math.floor()는 인수로 전달된 숫자의 소수점 이하를 버리고 내림 처리합니다. 즉, 4.564로 만듭니다.
  • 결과적으로, 이 방식은 0부터 9 사이의 정수 중 하나를 반환하게 됩니다.

2. parseInt(Math.random() * 10)

  • parseInt()는 문자열을 정수로 변환하는 메서드입니다. 하지만 인수가 숫자일 경우, 소수점 이하를 잘라내고 정수 부분만 반환합니다.
  • 예를 들어, parseInt(4.56)이라면 4를 반환합니다.
  • 중요한 차이점: parseInt()Math.floor()와 다르게 처리될 수 있습니다. parseInt()소수점을 잘라내는 것이므로 내림 또는 반올림과는 다릅니다. 이 때문에 아주 작은 값일 때 오차가 발생할 수 있습니다.

예시 코드

두 메서드의 차이를 확인하기 위해 간단한 예제 코드를 보겠습니다.

for (let i = 0; i < 10; i++) {
  const randomValue = Math.random() * 10;
  console.log(`Math.floor: ${Math.floor(randomValue)}, parseInt: ${parseInt(randomValue)}`);
}

결론

  1. Math.floor(Math.random() * 10):
    • 0에서 9까지의 정수를 항상 생성합니다.
  2. parseInt(Math.random() * 10):
    • 대부분의 경우 동일한 값을 반환하지만, 간혹 예상하지 못한 결과가 나올 수 있습니다.
    • 특히, 매우 작은 소수점 값에서 오차가 발생할 가능성이 있습니다.

따라서 일관된 결과를 원한다면, Math.floor(Math.random() * 10)을 사용하는 것이 좋습니다. parseInt()는 문자열을 정수로 변환할 때 사용하는 것이 가장 적합합니다.

결론

Math.random() 10 를 통해서 0-9.99999999999 의 랜덤숫자를 얻을 수 있고,
Math.floor(Math.random()
10) 를 통해 0-9까지의 정수를 얻을 수 있다.

profile
YOLO

0개의 댓글