부동소수점...? 반올림 관련 질문입니다. 0 2 2,115

by 병기태 [2015.12.17 14:29:01]


select 2930620.0 / 209.0 * 1.5 * 9.5 / 10 from dual;

이 쿼리를 치게되면 19981.5 가나오고 그러므로

select ROUND(2930620.0 / 209.0 * 1.5 * 9.5 / 10) from dual;

이렇게 반올림을 해주게되면 19982가 나올거라 예상하였습니다...

 

그런데 결과는 19981이 나오고 확실하겐 모르겠지만 결과가 19981.4999999... 이런식으로 되어있어 반올림이

안되었던게 아닐까하고는 있는데요...

 

초보라 해결방법을 잘모르겠습니다 ㅠㅠ 저런현상은 왜일어나는것이며 해결방안을 알 수 있을까요?>

by 비주류 [2015.12.17 15:06:40]

수치해석 유효숫자의 악몽이 떠오르는군요.

아시다시피 소수점 이하 처리할 때 자리수 한계가 있는 만큼,

가능하다면, 곱셈 먼저하고 나눗셈 처리를 한번에 몰아서 하는 것도 한 방법일 것 같습니다.
(피제수 부분이 변수 범위 안으로 들어온다는 가정하에)
ex) (2930620 * 1.5 * 9.5) / (209 * 10)

어찌되었든 계산 중간과정이 가능한한 유한소수가 되도록 하는 것이 관건이겠네요.


by 대한민국만세 [2015.12.18 16:00:39]

ROUNG( 숫자, 반올림자릿수) 이렇게 자릿수를 명시해주면 안될까요

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입