백엔드/데이터베이스
실수 값 비교할 때 주의할 점
1005ptr
2021. 3. 21. 17:57
반응형
이번 상황은 이렇다.
이번 데이터는 한 묶음으로 버전 관리가 이뤄지는 데이터다.
네가지 데이터가 서로 관계를 가지고 한 묶음으로 버전 관리가 이뤄진다.
이전 버전과 현재 버전 간에 변화 수치를 확인하는 화면이 존재한다.
기본 절차
- 데이터를 비교 기준에 따라 그룹핑 한다.
- 상호 데이터 간에 비교를 진행한다. 추가된 경우, 변경된 경우, 취소된 경우가 존재한다.
- 추가된 경우 - 현재 데이터에는 존재하는데 이전 데이터에 존재하지 않는 그룹의 경우
- 취소된 경우 - 이전 데이터에는 존재하는데 현재 데이터에 존재하지 않는 그룹의 경우
- 변경된 경우 - 현재 데이터와 이전 데이터에 모두 존재하지만 수치가 변경된 경우
이때 문제는 변경된 경우에 비교 수치가 실수값이라는 점이다.
분명 동일한 데이터를 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
반응형