PostgreSQL에서 FLOAT 타입 제대로 알고 사용하기
문제우리 회사는 PostgreSQL에 실수 값이 `real(float4)` 타입으로 저장되어 있으며, 이 데이터를 JavaScript에서 `Math.round()`를 사용하여 반올림하여 통계를 제공하고 있었다.새로운 통계 방식을 위해 Superset을 도입했고, 이 과정에서 SQL의 `ROUND()` 함수를 사용하여 반올림했다.하지만 통계 수치나 비교 결과가 불일치하는 문제가 발생했다. 원인부동소수점의 한계앞서 얘기했듯, PostgreSQL에는 실수가 `real` 타입으로 저장되고 있었다.`real`과 `double precision` 같은 부동소수점 타입은 이진수로 표현할 수 있는 숫자만 정확히 저장할 수 있어서, 대부분의 10진 실수는 근사값으로 저장된다.SELECT 0.1::real; ..