본문으로 바로가기

[JavaScript] 소수점 사칙연산 처리하기 - 2

소수점 사칙연산 처리하는 방법은 소수점 사칙연산 처리하기 - 1 게시글을 읽어보면 된다. 필자도 실제로 위 방법을 사용한다. 그런데 버그가 발생한 경우가 있어 해결하는 방법을 공유하려고 한다. 우선 위 방법대로 하면 어떤 버그가 발생할 수 있는 지 확인해보자. (사실 버그는 아니다.) - (참고 : 해당 게시글에서는 1 게시글 마지막 문제점을 해결하지 못 했습니다. 다음 게시글에서 마저 해결해보도록 하겠습니다.) 

소수점 사칙연산 버그

숫자 : 147012.48 이 있다고 하자. 이것을 다른 숫자와 더하기 위해서는 소수점을 없애기 위해 * 100을 해주어야 한다. 그럼 * 100을 해보자. 우리가 원하는 결과는 14701248 이다. 과연 그렇게 값이 나올까?

우리가 예상했던 것과 달리 소수점 아래 0.~~~2 라는 값이 붙었다. * 100 으로 처리하기엔 자바스크립트에서 부족하였다. 그럼 어떻게 해결할 수 있을까? 간단한 해결방법을 알아보자.

소수점 사칙연산 해결방법

해결 방법은 parseInt 함수를 사용하는 것이다. 위 14701248.000000002 값에서 parseInt를 하게 되면 14701248로 우리가 원하는 값이 나오게 된다. 즉 기존 계산하였던 공식에서 parseInt만 추가하면 된다.

기존 예시)

(0.01 * 100 + 0.02 * 100) / 100

수정 예시)

(parseInt(0.01 * 100) + parseInt(0.02 * 100)) / 100

위 처럼 parseInt 함수를 이용하면 손쉽게 위 문제를 해결할 수 있다. 그런데 위 방법에도 주의해야 할 점이 있는데 자바스크립트에서 안전하게 표현할 수 있는 정수 범위를 넘어서면 값을 보장할 수 없다는 것이다. 자바스크립트에서 안전하게 사용할 수 있는 정수 값은 9007199254740991 (Number.MAX_SAFE_INTEGER) 이니 이것을 생각하여 사용하면 좋을 것 같다. 

 

(참고 : 해당 게시글에서는 1 게시글 마지막 문제점을 해결하지 못 했습니다. 다음 게시글에서 마저 해결해보도록 하겠습니다.) 

마지막

해당 내용은 틀릴 수도 있다는 것을 감안하여 봐주세요. 틀린 내용 및 오탈자 수정 요청 환영입니다.

반응형