Q&A

  • round함수에 관한 질문입니다.
round함수가 반올림을 하는 거잖아여,, 제가 소수점 2번째 자리에서 반올림을
하고 싶은데... 에러가 나네요..
Jo_Time := round(((StrToTime(Time_End) - StrToTime(In_End)) * 24),2);

제가 델파이는 첨이라 잘 모르겠어여..
오라클에서 round를 사용할때 round(0.166666,2)를 하면 0.17로 나오잖아여..
근데 델파이에서는 에러가 나네요...

그리고 질문이 하나가 더 있는데요..
시간문제인데...
time_end가 19:00시입니다. 그리고 in_end는 18:00시입니다..
얼핏 계산을 하더라도 jo_time에는 1이 나와야 정상인데 이걸 계산해보면
0.999999999999999 (9가 15개 나와요...) 가 나오거든요,,,
이건 왜 이렇죠?
time_end가 19:00시고 in_end가 18:30분이면 0.4999999.....가 나와요,,,
그래서 프로그램에서 에러가 나는건지...
jo_time은 char형이고 자리수는 8자리이거든요,,,,
에러내용은 너무 큰 값이 들어와서 입력할 수 없다고 그래요.,,,

짧은 제 지식으로는 char형이 가지고 있는 자리보다 들어오는 값은
17자리(.을 포함해서)이기 때문에 에러가 나는것 같은데 맞나여?
1  COMMENTS
  • Profile
    홍성락 2003.07.22 19:49
    hsr//////////////////////////////////////////////////////////
    RoundTo를 사용해보세요, 아니면 format함수를 사용하셔도....
    그리고 jo_time은 char형 배열로 사용하셨다면 넉넉히 주시는게 좋구요
    굳이 다른 이유가 없다면 string이나 실수형으로 받아 놓고 필요시마다 문자로 바꾸셔도 될것 같은데요.

    var
      Time_End, In_End : string;
      Jo_Time : array[0..8] of char;
    begin
      Time_End := '19:00';
      In_End   := '18:35';
      StrPCopy(Jo_Time, FloatToStr(RoundTo(((StrToTime(Time_End) - StrToTime(In_End)) * 24),-2)));
      showmessage(Jo_Time);
    end;