특정 상품의 정가와 할인률을 계산하여 할인된 가격을 보여주려는데 종종 1원씩 차이나는 현상이 발생했다.
예를들어 10,000원에서 10%할인이 들어가면 9,000원이 나와야하는데 9,001원이 나오는 현상....
구글링을 해도 잘 안나오고 겪어보지 않으면 절대 모를 일이기에 일단 정리해두려고 한다.
(mssql이 사용 비중이 별로 없어서 그런것 같기도 하다.... 아마 이 글도 찾는 사람이 있을까 싶긴한데)
테스트해보니 mssql에서 float 형식을 int로 변환할 때 1씩 값이 증가되는 것을 보았다.
이건 형변환 할때도 마찬가지지만, float결과물을 int 타입의 컬럼에 insert할때도 마찬가지다.
분명 9,0000을 insert했는데, 컬럼 타입이 서로 다르면 9001로 들어가 있다.
그럼 어떻게 해결해야할까....
첫번째로 생각한게 DB Table의 컬럼이 int타입이니 이것에 맞춰서 계산을 마친 후 int로 형변환을 하는 것.
select 했을때의 결과 값은 같지만 최종 int로 변환해줬으니 컬럼에 문제없이 insert가 잘 되었다.
하지만 숫자와 할인률이 바뀌니 1이 다시 튀어나왔다....
float로 계산한 결과를 int로 바꿔주니 1이 추가된 것을 볼 수 있었다.
컬럼에 집어넣기 전 int로 바꿨는데 결국 float를 int로 바꾸는 과정에서 1이 추가되는건 똑같았다.
결론은... convert int를 안쓰던가 float로 계산을 하지 말아야한다.
근데 소수점으로 계산하려면 float를 안쓸수가 없는데... 해서 생각이 난게 convert를 쓰지않고 1.0을 곱하는 것!!
아주 잘 된다ㅎㅎㅎ mssql에서 소수점 계산하고 int로 변환할 일 있으면 convert float 하지말고 1.0 곱하는 방식으로 하는게 좋은 것 같다.
혹시 다른 방법이 있거나 생각지 못한 부분있으면 댓글로 알려주세요..!
'Database > MS-SQL' 카테고리의 다른 글
MSSQL) MyBatis와 프로시저 update/insert 사용시 결과 값 받기. -1이 반환될때, MyBatis + Procedure (0) | 2023.10.26 |
---|---|
MS-SQL) 테이블 컬럼 추가, 기본값 디폴트 값 주기 (0) | 2023.09.21 |
[MS-SQL] 데이터베이스 유저, 테이블 소유자 조회하기 (0) | 2022.12.07 |
MS-SQL) DB 테이블 컬럼 조회하기, 테이블 조회하기 (0) | 2022.09.27 |
MS-SQL) 해당 테이블을 사용하는 프로시저 조회하기, 특정 단어를 포함하는 프로지서 조회하기 (0) | 2022.09.26 |