[js] Math.trunc() vs Math.floor() (+ '~~' 틸트 연산자)

비트·2023년 10월 13일
0

JavaScript

목록 보기
14/22
post-thumbnail

궁금해진 이유!

// 문제 설명
정수 num1과 num2가 매개변수로 주어질 때, 
num1을 num2로 나눈 값에 1,000을 곱한 후 
정수 부분을 return 하도록 soltuion 함수를 완성해주세요.

최근 코딩테스트를 입문하면서 해당 문제를 풀게 되었다.
num1에서 num2를 나눈 후 소수점을 버려주기 위해, Math.floor() 라는 메서드로 소수점을 내림.

function solution(num1, num2) {
    let answer = Math.floor(num1 / num2 * 1000);
    return answer;
}

위처럼 풀고 통과까지 되어서 다른사람 코드를 보다가 Math.trunc()를 사용한 것을 보고 메서드를 알게 되었다.

return Math.trunc(num1 / num2 * 1000);

Math.floor()

Math.floor() 메서드는 주어진 숫자를 이하의 가장 큰 정수로 내림한다.

  • 즉, 숫자보다 작거나 같은 정수 중 가장 큰 값을 반환.
Math.floor(4.9) // 4를 반환.
Math.floor(-4.9) // -5를 반환.

Math.trunc()

Math.trunc() 메서드는 주어진 숫자의 소수 부분을 버린다.

  • 즉, 숫자를 가장 가까운 작은 정수로 내림.
Math.trunc(4.9) // 4를 반환.
Math.trunc(-4.9) // -4를 반환.

~~ 연산자

~~ 연산자는 비트 연산자 중 하나로, 주어진 숫자를 32비트 정수로 변환한 다음 다시 32비트 정수로 반환.

  • ~~를 사용하면 주어진 숫자의 소수 부분은 삭제되고 정수 부분만 남는다.
  • ~~ 연산자는 주로 성능 최적화를 위해 사용되며, 정수 부분만을 빠르게 추출할 수 있다.

사용 사례

정수 부분만을 빠르게 추출해야 할 때, 성능을 고려하는 경우 ~~를 사용.
그러나 음수의 경우 주의가 필요하며 결과가 Math.trunc()와 다를 수 있다.

~~4.9; // 4를 반환.
~~(-4.9); // -4를 반환. (주의: 결과가 Math.trunc()와 다를 수 있음)

❗앞서 풀었던 문제같은 경우에는 소수점을 버리면 되는 문제라 Math.trunc() 메서드가 적합!

따라서, 주어진 숫자에 따라 두 메서드의 반환 값이 다를 수 있으며, 주로 사용하는 상황에 따라 선택할 수 있다.

  • Math.trunc()는 소수 부분을 버린 결과가 필요한 경우에 유용하며,
  • Math.floor()는 항상 내림 결과를 얻고자 할 때 사용.

+ Math.trunc()는 숫자의 정수 부분을 안전하게 추출할 때 사용하며, ~~는 성능을 개선하고 싶을 때나 정수 부분만을 필요로 할 때 사용.

  • ~~를 사용할 때 음수 값에 대한 예상치 못한 동작에 주의.



출처

profile
Drop the Bit!

0개의 댓글