Node PostgreSql 부동소수점 해결하기

CloudJun·2022년 1월 6일
0

개요

부동 소수점을 가지고 있는 위경도 데이터가 Postgresql에서는 정상적으로 들어가있었지만, PG (node-postgresql) 묘듈을 사용하여 가져오는 경우 소수점 3자리 단위에서 반올림되어 데이터를 가져고오고 있었다.

문자열로 가져오는것 까진 봐주려했는데 소수점을 자신 맘대로 짤라오는건 rawSQL에 긍정적인 내가 보기에도 봐줄수가 없었는데 한국에는 따로 정리된 문서가 없어 선례 사례로 정리합니다.

문제 해결

예시 ( SQL )

SELECT
	title:: TEXT,
	lat:: float,
	lng:: float
FROM my.table

DB 에 등록되어 있는 데이터

{
	"title" : "테스트",
	"lat" : 35.36000061035156,
	"lng" : 129.21499633789062
}

그러나 이 데이터를 Node에서 가져오면 아래처럼 가져온다

{
	"title" : "테스트",
	"lat" : 35.36,
	"lng" : 129.215
}

이건 PG (Node-Postgresql) 에서 이미 임의로 지정된 타입에 따라 처리된 결과를 가공하는것이기 때문에 여기서 toFixed() 로 재가공을 진행해도 원하는 결과를 얻을 수 없다.

하지만 똑똑한 PG 개발자들은 이미 이런 이슈를 알고 있었고 PostgreSQL → JSON 로 변환하는 과정에서 타입이 잘리는 문제를 임의로 조정 할 수 있는 방법을 정리해뒀다.

https://github.com/brianc/node-pg-types

import { types } from 'pg';

types.setTypeParser(1700, x => parseFloat(x));

여기서 1700은 부동소수점 (float)에 대한 유형 번호로 이 타입을 수정하여 다시 정의한다.

결과

DB에 있는 float 값을 따로 재가공 하지 않고 원문 그대로 가져오는 것을 볼 수 있다.

{
	"title" : "테스트",
	"lat" : 35.36000061035156,
	"lng" : 129.21499633789062
}
profile
짧고 굵게 살아가는 백엔드 개발자

0개의 댓글