백앤드에서 내려주는 데이터 중 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 사이의 정수만 보장을 한다.