안녕하십니까?
델파이를 이용하여 업무 프로그램을 개발 중입니다.
숫자가 들어가는 필드가 필요해서 예전에는 float로 필드를 정하여 처리를 하였는데
소수점이 있는 숫자가 들어가면 DB에 정확한 갑이 저장되지 않더군요.
예를 들면 DBGrid에서 4.1이라고 넣으면 실제 DB에는 4.1000000003 과 같은 다른 값이 들어 가더군요. 게다가 어떤 경우에는 '다른 사용자가 사용중이기 때문에... (실제 메세지는 영어로 나와서 기억이 안나네요.)' 수정이나 삭제가 안되는 경우도 있었습니다.
이 문제를 해결하기 위해 여기 저기서 자료를 찾아보니 decimal 필드로 변환을 하면 가능하다고 해서 모든 테이블의 float 필드를 decimal로 바꿨습니다. 다른 DB는 안써봐서 모르겠지만 MS-SQL 7.0에는 decimal 필드인 경우는 소수점 자리수를 정하게 되어있더군요. 그래서 10자리로 고정시켰습니다. 이렇게 하니까 수정이나 삭제가 되지 않는 문제는 해결이 되었습니다.
그리고 소수점이 들어있는 숫자의 DB 저장문제도 대부분의 경우에는 제대로 되는데 유독 특별한 숫자들만 제대로 저장이 안됩니다. 그게 어떤 규칙이 있는 건 아닌거 같구요..
제가 알고 있는 숫자로는 8.2 가 있습니다. DB에는 8.1999999999 로 저장이 되더라구요.
도저히 방법을 찾을 수가 없네요. 어떻게 하면 해결할 수 있을까요?
고수님들의 도움이 절실합니다.
> 안녕하십니까?
> 델파이를 이용하여 업무 프로그램을 개발 중입니다.
> 숫자가 들어가는 필드가 필요해서 예전에는 float로 필드를 정하여 처리를 하였는데
> 소수점이 있는 숫자가 들어가면 DB에 정확한 갑이 저장되지 않더군요.
> 예를 들면 DBGrid에서 4.1이라고 넣으면 실제 DB에는 4.1000000003 과 같은 다른 값이 들어 가더군요. 게다가 어떤 경우에는 '다른 사용자가 사용중이기 때문에... (실제 메세지는 영어로 나와서 기억이 안나네요.)' 수정이나 삭제가 안되는 경우도 있었습니다.
> 이 문제를 해결하기 위해 여기 저기서 자료를 찾아보니 decimal 필드로 변환을 하면 가능하다고 해서 모든 테이블의 float 필드를 decimal로 바꿨습니다. 다른 DB는 안써봐서 모르겠지만 MS-SQL 7.0에는 decimal 필드인 경우는 소수점 자리수를 정하게 되어있더군요. 그래서 10자리로 고정시켰습니다. 이렇게 하니까 수정이나 삭제가 되지 않는 문제는 해결이 되었습니다.
> 그리고 소수점이 들어있는 숫자의 DB 저장문제도 대부분의 경우에는 제대로 되는데 유독 특별한 숫자들만 제대로 저장이 안됩니다. 그게 어떤 규칙이 있는 건 아닌거 같구요..
> 제가 알고 있는 숫자로는 8.2 가 있습니다. DB에는 8.1999999999 로 저장이 되더라구요.
>
> 도저히 방법을 찾을 수가 없네요. 어떻게 하면 해결할 수 있을까요?
>
> 고수님들의 도움이 절실합니다.
이상하네요! 저흰 사이베이스 11.0.2.2 For NT를 사용합니다! float라는 것은
정확한 값이 아니라고 생각하시면 됩니다! 또한 Stored Procedure에서도
지역변수를 사용하실때 기존 float타입을 decimal로 변환하시는 것 잊지마시고요..
참고로 decimal(p,s)는 -10^38 to 10^38-1입니다!
select 12/10 as message한번 테스트해보면 1.2가 아닌 1이나올겁니다!
이런경우 10를 인식못하는 경우인데 이럴때는
declare @i numeric(2,0)
select 12/@i as message하면 정확히 1.2가 나올겁입니다! 이것이 그런 차이점이지요..