개발자의 공부방/Frontend

JS] 자바스크립트 소수점 문제

  • -
728x90
반응형

백앤드에서 내려주는 데이터 중 BigDecimal 형태의 데이터를 클라이언트쪽으로 보내주고 있었다.

 

해당 부분을 간략한 데이터와 JS 콘솔로그로 확인해보겠다.

 

Database : MySql

필드 : decimal(36,18)

컬럼명 : tp_point

컬럼값: 1000.123456789012345679

 

현재 tp_point 안에는 1000이라는 정수 뒤에 총 18자리의 소수점이 있다.

 

이 부분을 클라이언트에서 받게 되면 결과가

 

1000.1234567890124 으로 받게 된다.

 

처음 의아했던 것은 1234567890123 다음에 4인데 왜 반올림이 된 상태로 1234567890124.. 으로 진행될까? 였다

 

뒷단에서 올림처리나 자릿수 절삭 로직이 있을거라고 예상했으나 큰 착각이었다

 

바로 결과와 원인을 설명하자면..

console.log(JSON.parse(`{"point":1000.123456789012345679}`))

 

콘솔로그에 위와 같이 JSON.parse를 통해서 결과를 출력하면 결과는 아래와 같이 출력된다.

{point: 1000.1234567890124}

 

이유는 자바스크립트 특성때문이다.

 

자바스크립트 숫자는 64비트 부동 소수점이다.

 

-9007199254740992 (-253)와 9007199254740992 사이의 정수만 보장을 한다.

 

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.