본문 바로가기
백엔드/데이터베이스

실수 값 비교할 때 주의할 점

by 1005ptr 2021. 3. 21.
반응형

이번 상황은 이렇다.

 

이번 데이터는 한 묶음으로 버전 관리가 이뤄지는 데이터다.

네가지 데이터가 서로 관계를 가지고 한 묶음으로 버전 관리가 이뤄진다.

이전 버전과 현재 버전 간에 변화 수치를 확인하는 화면이 존재한다.

 

 

기본 절차

  1. 데이터를 비교 기준에 따라 그룹핑 한다.
    1. qodbtn.tistory.com/341
  2. 상호 데이터 간에 비교를 진행한다. 추가된 경우, 변경된 경우, 취소된 경우가 존재한다.
    • 추가된 경우 - 현재 데이터에는 존재하는데 이전 데이터에 존재하지 않는 그룹의 경우
    • 취소된 경우 - 이전 데이터에는 존재하는데 현재 데이터에 존재하지 않는 그룹의 경우
    • 변경된 경우 - 현재 데이터와 이전 데이터에 모두 존재하지만 수치가 변경된 경우

이때 문제는 변경된 경우에 비교 수치가 실수값이라는 점이다.

분명 동일한 데이터를 DB에 저장하고

DB 프로시저를 통해 변경이력 테이블로 INSERT-SELECT를 했을 뿐인데

데이터가 18.00000000001 과 18.0 이런식으로 불러와졌다.

 

 

항상 그러는것도 아니고 데이터 하나만 딱 그랬다.

어떤 단게에서 오차가 발생했는진 모르지만 이 데이터는 소수점 셋째자리까지 정확도를 유지하므로

비교할 때 Math.Round(수치 * 1000.0)/1000.0 으로 소수점 떼는 로직을 추가했다.

 

 

coding-factory.tistory.com/250

 

[Java] 자바 소수점 n번째 자리까지 반올림하기

이번 포스팅에서는 자바에서 긴 소수를 반올림하여 n번째 자리까지 나타내는 방법에 대해 알아보겠습니다. 여러가지 방법이 있겠습니다만 Math.round();함수를 활용하거나 String.format(); 함수를 활

coding-factory.tistory.com

 

반응형

댓글