본문 바로가기
자바스크립트(JavaScript)/프로그래머스 문제풀기

[JavaScript] Number.isInterger() 정수인지 확인하기

by yerica 2024. 12. 19.

 Number.isInterger() 메서드를 사용하면 값이 정수인지 확인할 수 있다.

Number.isInteger(value)
대상 값이 정수 혹은 정수로 표현할 수 있는 부동 소수점 숫자 true를 반환한다.
정수가 아니거나, 값이 NaN 혹은 Infinity, 혹은 숫자가 아닌 다른 것인 경우 false를 반환한다.

+) 아주 작은 값인 경우 정수로 표현된다.
일부 숫자 리터럴은 정수가 아닌 것처럼 보이지만 실제로는 정수를 나타낼 때가 있다.
ECMAScript 부동 소수점 숫자 인코딩의 정밀도 제한(IEEE-754)으로 인해 발생한 것이다.
예를 들어 5.0000000000000001는 5와 1e-16만큼만 차이가 나며, 이는 너무 작아서 표현할 수 없다.
(참고로, Number.EPSILON은 1과 1보다 큰 다음 표현 가능한 부동 소수점 수 사이의 거리를 저장하며, 이는 약 2.22e-16)

따라서 5.0000000000000001는 5와 동일한 인코딩으로 표현되므로 Number.isInteger(5.0000000000000001)는 true를 반환하게 된다. 이와 비슷하게 Number.MAX_SAFE_INTEGER의 주변의 숫자는 정밀도 손실로 인해 정수가 아닌 경우에도 Number.isInteger가 true를 반환하게 된다.
(실제 임계값은 10진수를 표현하는 데 필요한 비트 수에 따라 달라진다. 예를 들어, Number.isInteger(4500000000000000.1)는 true이지만, Number.isInteger(4500000000000000.5)는 false이다.)