Q&A

  • 소수점 값 비교
소수점 4째자리까지 비교를 하는데 어던것은 잘되고 어떤 금액은 안되는 이유는 뭘까요?
예를 들어
185.2500이라는 값이 있는데
sSupply_Sum:=185.2500;
sSupply_Sum2:=185.2500;

if sSupply_Sum = sSupply_Sum2 then
          begin
            MessageBox(Self.Handle, '납품작업이 종료되었습니다. 수정작업으로 전환하시기 바랍니다.', ' 알 림', MB_ICONWARNING + MB_OK);
            Abort;
          end;
          
          이렇게 되면 조건절에 걸려야 하는데 그냥 넘어가는이유는 뭘까여
          아시는 분은 답변부탁드립니다
          
          
2  COMMENTS
  • Profile
    이중철 2003.04.30 06:48
    님께서 제시한 내용은 아마 될꺼에요.
    그러나 실제 코딩은 그와 같지 않고 다를꺼에요.

    다음을 보세요..

    var d, a : double;
    begin
      d := 1.023;
      a := 1000;
      d := d * a;
      if d = 1023 then
        exit;
      .....
    end;

    이와같으면 빠져나가지 않고 계속 진행될 것 같죠

    그러나 유감스럽게도 그냥 빠져나옵니다.

    여기서 브레이크를 걸고 d 값을 보면 1023으로 나옵니다.

    또 여기서 속으면 안됩니다.

    디버거에서 Dump 선택해서 값을 보면

    실제는 1022.9999999999?? 이런값 이란것을 알수 있습니다.

    그래서 될수 있으면 실수형 비교문은 Roundto를 써서 비교해보세요

    유효자리가 4자리이면

    if Rountto(d, -4)  = 1023 then
      exit;

    이런식으로 ^^ 그럼 안녕히 계시고 전 이만...


  • Profile
    오병주 2003.04.29 22:36
    이상하네요...
    않될리가 없을테인데...

    그러면 이렇게 한번 해보세요..

    소숫점 위의 값 과 소숫점 밑의 값을 가지고 비고해보세요..

    따로 따로 떼내어서 비교해보세요..

    밑의 예제는 소숫점 밑의 것만 떼내서 비고하는 문장입니다.

    var
      A1, B1 : String;
      L1, L2 : String;

    sSupply_Sum  :=185.2500;
    sSupply_Sum2 :=185.2500;

    A1 := IntToStr(sSupply_Sum);
    B1 := IntToStr(sSupply_Sum2);


    L1 := Copy(A1, Pos('.',A1+1), Length(A1)-Pos('.',A1);
    L2 := Copy(B1, Pos('.',B1+1), Length(B1)-Pos('.',B1);

    if L1 = L2 Then
    Begin
      ~
    end
    else
    Begin
    ~
    end;

    앞에서도 말했지만 이상하네요...

    함번 않되면 편법으로라도 해보심이 어떠하실런지...

    • 파인뷰
    • 2003.04.29 23:42
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이중철
      2003.04.30 07:18
      꿈의대화님이 말씀하신대로 그와같은 작업을 합니다. 그리고 첫번째 소스를 보면 메세지큐에 쌓이기 때...
    • 꿈의대화
      2003.04.29 21:58
      .
    • 이강석
      2003.04.30 01:54
      저도 그런 문제라고 생각은 듭니다. 그런데 문제는 그 ParValue를 처리하는 부분은 제가 직접처리하는게 ...
    • 김재현
    • 2003.04.29 21:07
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 몽상
      2003.05.07 20:51
      SERVER NAME은 IP주소로 하는 것이 아니라.. 서비스 이름을 말하는 겁니다. 예로 : ORA817  ...
    • 쌩초보
    • 2003.04.29 20:52
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 한원희
      2003.05.01 01:35
      안녕하세요. 한원희입니다. 자식 윈도우에서 발생한 이벤트들을 부모 윈도우의 WM_COMMAND 메시지로 알...
    • 이영민
    • 2003.04.29 20:39
    • 2 COMMENTS
    • /
    • 1 LIKES
    • 이중철
      2003.04.30 06:48
      님께서 제시한 내용은 아마 될꺼에요. 그러나 실제 코딩은 그와 같지 않고 다를꺼에요. 다음을 보세요....
    • 오병주
      2003.04.29 22:36
      이상하네요... 않될리가 없을테인데... 그러면 이렇게 한번 해보세요.. 소숫점 위의 값 과 소숫점 ...
    • 최광훈
    • 2003.04.29 20:34
    • 0 COMMENTS
    • /
    • 0 LIKES
    • wooki
      2003.04.29 20:42
      Anchors라는 프로퍼티가 있습니다. akRight와 akBottom을 True로 조정하고 한번 해보세요. 원하는 답이 ...
    • 오병주
      2003.04.30 01:41
      [팁] 화면을 일정한 크기대로 보여주기 (800*600) 개발한 것을 -> 1024*768 크기로 보여주기 패키지...
    • wooki
    • 2003.04.29 20:05
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 민진기
    • 2003.04.29 18:48
    • 7 COMMENTS
    • /
    • 0 LIKES
    • 이병훈
      2003.05.03 10:18
      안녕하세요. 여러 의견이 분분하시건 같아서 몇자 적습니다. ^^; 제가 보기에는 인덱스 구성이 잘못...
    • nilriri™
      2003.05.03 03:28
      Query1.SQL.Add('and to_day IS NULL'); 이부분을 쓰시기 전에.. 일괄적으로 null 값이 들어있는 컬...
    • 이추형
      2003.04.29 23:45
      다른분들이 언급한 like 문법에 대한것은 이해가 가지 않습니다. 건수가 200건 밖에 않되는데 인덱스를 타...
    • 정경철
      2003.04.29 19:44
      Query1.SQL.Add('where buseo like :A1'); 이 부분 때문에 속도가 느려진것 같습니다. 쿼리에서 Like ...
    • KDDG_ZZOM
      2003.04.29 19:18
    • 기형종
      2003.04.29 19:04
      안영하세요 작성하신 테이블에 일단 buseo가 인덱스로 설정되어야 하구요 또 like명령은 가급적 사용하지...
    • 파도랑
      2003.04.29 19:17
      like도 인덱스 사용합니다. (오라클이나 MS SQL의 경우임. 질문처럼 파라독스를 사용하면 인덱스 안쓸 수...
    • 이정한
    • 2003.04.29 11:16
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 김주
    • 2003.04.29 10:28
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 김주
    • 2003.04.29 10:25
    • 2 COMMENTS
    • /
    • 0 LIKES
    • KDDG_ZZOM
      2003.04.29 19:59
      FillChar(Rd, SizeOf(Rd), 0); 즐프하세요...
    • 최종민
      2003.04.29 12:34
      혹시 zeromemory라는 함수를 쓰면 되지 않을까요? API인 거 같은데... 다시 초기화가 필요한가요? 그...
    • 김주
    • 2003.04.29 10:12
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이용훈
      2003.04.29 19:52
      찾기에서 'registry에서 시간표현 바꾸기'라는 제목을 찾으세요 김영대님이 이미 답을 해 놓으셨습니다....
    • 정민섭
    • 2003.04.29 09:05
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 타락천사
      2003.04.29 10:20
      안녕하세요. 타락임다.. HTTP 로 대용량 파일을 주고 받으면 웹서버가 조용히 맛갑니다.. 전에 대용...
    • DirtyVictory
      2003.05.01 06:19
        fh := FileOpen(ListBox1.Items.Strings[I], fmOpenRead);   try   &nb...
    • 이민선
    • 2003.04.29 08:02
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      2003.04.29 19:03
      TZipTV라는 컴포넌트가 있습니다. www.tziptv.com 에 가보세욤 ^^; 또는 우리나라에선.. http:/...
    • 양윤정
    • 2003.04.29 07:09
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 타락천사
      2003.04.29 10:24
      안녕하세요. 타락임다. 에러는 b.dcu 파일이 없다는 말입니다. 그럼 전체 검색 경로중 b.dcu 파일이 ...
    • 이상현
    • 2003.04.29 06:54
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 장태원
      2003.04.29 19:27
      엔터랑 스페이스 둘다 됩니다.
    • 초보자
    • 2003.04.29 06:27
    • 1 COMMENTS
    • /
    • 0 LIKES
    • ^ㅡ^
      2003.04.29 06:35
      답변이 될지 모르겠습니다 저두 초보라서리 일단 그룹박스에 구분을 주시고 그것을 선택한것에 대...