프로그래머스 문제를 풀던 중 숫자를 나눈 몫을 구해야 하는 문제가 있었는데, 정수형태여야했다. 평소 이런 문제에서는 크게 Math.round, Math.ceil, Math.floor를 사용했는데 스터디원분이 Math.trunc 라는 메서드를 소개해주셨다.
| MDN
주어진 값의 소수 부분을 제거하고 숫자의 정수 부분만 반환한다
지금까지 나는 floor가 내가 지정한 자릿수외의 소수는 버리는 메서드라고 생각하고 있었는데, 그럼 trunc와 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