[Javascript] Math.trunc vs Math.floor

이썸이·2024년 6월 5일
0

프로그래머스 문제를 풀던 중 숫자를 나눈 몫을 구해야 하는 문제가 있었는데, 정수형태여야했다. 평소 이런 문제에서는 크게 Math.round, Math.ceil, Math.floor를 사용했는데 스터디원분이 Math.trunc 라는 메서드를 소개해주셨다.

| 해당 프로그래머스 문제

Math.trunc

| MDN
주어진 값의 소수 부분을 제거하고 숫자의 정수 부분만 반환한다

그럼 Math.floor와의 차이는 뭘까?

지금까지 나는 floor가 내가 지정한 자릿수외의 소수는 버리는 메서드라고 생각하고 있었는데, 그럼 trunc와 floor의 차이가 뭔지 혼란스러워졌다.


Math.floor

| MDN
주어진 숫자와 같거나 작은 정수 중에서 가장 큰 수를 반환한다

예를 들어

console.log(Math.floor(3.14)) // 3
console.log(Math.floor(5.9)) // 5

여기까지는 내가 이해해온것과 크게 다르지 않다. 결국 작은 정수를 반환하기 때문에 소수를 버리는 것과 같은 결과가 나오기 때문이다. 그럼 음수라면 어떨까?

console.log(Math.floor(-3.14)) // -4
console.log(Math.floor(-5.9)) // -6

놀랍게도 각각 -3, -5가 아닌 더 작아질 수 있는 정수인 -4, -6이 반환된다.
그럼 같은 숫자를 trunc를 사용했을 땐 어떻게 될까?

console.log(Math.trunc(-3.14)) // -3
console.log(Math.trunc(-5.9)) // -5

위 코드를 실행한 결과와 같이 trunc로 했을땐 소수는 버리고 정수 부분만 출력되는 것을 알 수 있었다.


그림으로 표현

-1.9에서 더 작게 표현할 수 있는 정수는 내림을 한 -2이다
-1.9의 절대값은 1이고 음수를 적용해주면 -1이다

console.log(Math.floor(-1.9)) // -2
console.log(Math.trunc(-1.9)) // -1

2.3에서 더 작게 표현할 수 있는 정수는 내림을 한 2이다
2.9의 절대값은 2이고 양수를 적용해주면 2이다

console.log(Math.floor(2.3)) // 2
console.log(Math.trunc(2.3)) // 2

0개의 댓글